# HG changeset patch # User Marcin Kuzminski # Date 1330718221 -7200 # Node ID ecd59c28f432fc36acc6d74e639385cf70432904 # Parent 6c6718c06ea23f0a89cbab96585a1d3af5f9fc81# Parent 6a97bbdded097140ee9817b2994737ecfa0f6182 merged beta into stable diff -r 6c6718c06ea2 -r ecd59c28f432 CONTRIBUTORS --- a/CONTRIBUTORS Wed Feb 29 23:11:13 2012 +0200 +++ b/CONTRIBUTORS Fri Mar 02 21:57:01 2012 +0200 @@ -17,3 +17,4 @@ Matt Zuba Aras Pranckevicius Tony Bussieres + Erwin Kroon \ No newline at end of file diff -r 6c6718c06ea2 -r ecd59c28f432 docs/changelog.rst diff -r 6c6718c06ea2 -r ecd59c28f432 docs/setup.rst --- a/docs/setup.rst Wed Feb 29 23:11:13 2012 +0200 +++ b/docs/setup.rst Fri Mar 02 21:57:01 2012 +0200 @@ -648,6 +648,7 @@ threads=4 \ python-path=/home/web/rhodecode/pyenv/lib/python2.6/site-packages WSGIScriptAlias / /home/web/rhodecode/dispatch.wsgi + WSGIPassAuthorization On Example wsgi dispatch script:: diff -r 6c6718c06ea2 -r ecd59c28f432 requires.txt --- a/requires.txt Wed Feb 29 23:11:13 2012 +0200 +++ b/requires.txt Fri Mar 02 21:57:01 2012 +0200 @@ -1,5 +1,5 @@ Pylons==1.0.0 -Beaker==1.6.2 +Beaker==1.6.3 WebHelpers>=1.2 formencode==1.2.4 SQLAlchemy==0.7.4 diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/__init__.py --- a/rhodecode/__init__.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/__init__.py Fri Mar 02 21:57:01 2012 +0200 @@ -38,7 +38,7 @@ requirements = [ "Pylons==1.0.0", - "Beaker==1.6.2", + "Beaker==1.6.3", "WebHelpers>=1.2", "formencode==1.2.4", "SQLAlchemy==0.7.4", diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/controllers/admin/settings.py --- a/rhodecode/controllers/admin/settings.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/controllers/admin/settings.py Fri Mar 02 21:57:01 2012 +0200 @@ -248,7 +248,7 @@ if update: h.flash(_('Updated hooks'), category='success') - Session.commit() + self.sa.commit() except: log.error(traceback.format_exc()) h.flash(_('error occurred during hook creation'), @@ -285,7 +285,7 @@ if setting_id == 'hooks': hook_id = request.POST.get('hook_id') RhodeCodeUi.delete(hook_id) - + self.sa.commit() @HasPermissionAllDecorator('hg.admin') def show(self, setting_id, format='html'): diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/controllers/changeset.py --- a/rhodecode/controllers/changeset.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/controllers/changeset.py Fri Mar 02 21:57:01 2012 +0200 @@ -221,17 +221,20 @@ lim = self.cut_off_limit if cumulative_diff > self.cut_off_limit: lim = -1 - size, cs1, cs2, diff, st = wrapped_diff(filenode_old=None, - filenode_new=node, - cut_off_limit=lim, - ignore_whitespace=ign_whitespace_lcl, - line_context=line_context_lcl, - enable_comments=enable_comments) + size, cs1, cs2, diff, st = wrapped_diff( + filenode_old=None, + filenode_new=node, + cut_off_limit=lim, + ignore_whitespace=ign_whitespace_lcl, + line_context=line_context_lcl, + enable_comments=enable_comments + ) cumulative_diff += size c.lines_added += st[0] c.lines_deleted += st[1] - c.changes[changeset.raw_id].append(('added', node, diff, - cs1, cs2, st)) + c.changes[changeset.raw_id].append( + ('added', node, diff, cs1, cs2, st) + ) #================================================================== # CHANGED FILES @@ -249,24 +252,27 @@ lim = self.cut_off_limit if cumulative_diff > self.cut_off_limit: lim = -1 - size, cs1, cs2, diff, st = wrapped_diff(filenode_old=filenode_old, - filenode_new=node, - cut_off_limit=lim, - ignore_whitespace=ign_whitespace_lcl, - line_context=line_context_lcl, - enable_comments=enable_comments) + size, cs1, cs2, diff, st = wrapped_diff( + filenode_old=filenode_old, + filenode_new=node, + cut_off_limit=lim, + ignore_whitespace=ign_whitespace_lcl, + line_context=line_context_lcl, + enable_comments=enable_comments + ) cumulative_diff += size c.lines_added += st[0] c.lines_deleted += st[1] - c.changes[changeset.raw_id].append(('changed', node, diff, - cs1, cs2, st)) - + c.changes[changeset.raw_id].append( + ('changed', node, diff, cs1, cs2, st) + ) #================================================================== # REMOVED FILES #================================================================== for node in changeset.removed: - c.changes[changeset.raw_id].append(('removed', node, None, - None, None, (0, 0))) + c.changes[changeset.raw_id].append( + ('removed', node, None, None, None, (0, 0)) + ) # count inline comments for path, lines in c.inline_comments: @@ -311,7 +317,7 @@ format='gitdiff').raw_diff() cs1 = None - cs2 = node.last_changeset.raw_id + cs2 = node.changeset.raw_id c.changes.append(('added', node, diff, cs1, cs2)) for node in c.changeset.changed: @@ -325,8 +331,8 @@ diff = diffs.DiffProcessor(f_gitdiff, format='gitdiff').raw_diff() - cs1 = filenode_old.last_changeset.raw_id - cs2 = node.last_changeset.raw_id + cs1 = filenode_old.changeset.raw_id + cs2 = node.changeset.raw_id c.changes.append(('changed', node, diff, cs1, cs2)) response.content_type = 'text/plain' @@ -335,8 +341,8 @@ response.content_disposition = 'attachment; filename=%s.patch' \ % revision - c.parent_tmpl = ''.join(['# Parent %s\n' % x.raw_id for x in - c.changeset.parents]) + c.parent_tmpl = ''.join(['# Parent %s\n' % x.raw_id + for x in c.changeset.parents]) c.diffs = '' for x in c.changes: diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/controllers/files.py --- a/rhodecode/controllers/files.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/controllers/files.py Fri Mar 02 21:57:01 2012 +0200 @@ -428,8 +428,9 @@ diff_name = '%s_vs_%s.diff' % (diff1, diff2) response.content_type = 'text/plain' - response.content_disposition = 'attachment; filename=%s' \ - % diff_name + response.content_disposition = ( + 'attachment; filename=%s' % diff_name + ) return diff.raw_diff() elif c.action == 'raw': diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/lib/diffs.py --- a/rhodecode/lib/diffs.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/lib/diffs.py Fri Mar 02 21:57:01 2012 +0200 @@ -83,8 +83,8 @@ if not diff: diff = wrap_to_table(_('No changes detected')) - cs1 = filenode_old.last_changeset.raw_id - cs2 = filenode_new.last_changeset.raw_id + cs1 = filenode_old.changeset.raw_id + cs2 = filenode_new.changeset.raw_id return size, cs1, cs2, diff, stats diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/lib/middleware/simplegit.py --- a/rhodecode/lib/middleware/simplegit.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/lib/middleware/simplegit.py Fri Mar 02 21:57:01 2012 +0200 @@ -121,6 +121,7 @@ #====================================================================== # CHECK ANONYMOUS PERMISSION #====================================================================== + if action in ['pull', 'push']: anonymous_user = self.__get_user('default') username = anonymous_user.username @@ -169,15 +170,13 @@ start_response) #check permissions for this repository - perm = self._check_permission(action, user, - repo_name) + perm = self._check_permission(action, user, repo_name) if perm is not True: return HTTPForbidden()(environ, start_response) #=================================================================== # GIT REQUEST HANDLING #=================================================================== - repo_path = safe_str(os.path.join(self.basepath, repo_name)) log.debug('Repository path is %s' % repo_path) @@ -203,7 +202,6 @@ :param repo_name: name of the repository :param repo_path: full path to the repository """ - _d = {'/' + repo_name: Repo(repo_path)} backend = dulserver.DictBackend(_d) gitserve = HTTPGitApplication(backend) @@ -229,19 +227,24 @@ return User.get_by_username(username) def __get_action(self, environ): - """Maps git request commands into a pull or push command. + """ + Maps git request commands into a pull or push command. :param environ: """ service = environ['QUERY_STRING'].split('=') + if len(service) > 1: service_cmd = service[1] mapping = { 'git-receive-pack': 'push', 'git-upload-pack': 'pull', } - - return mapping.get(service_cmd, - service_cmd if service_cmd else 'other') + op = mapping[service_cmd] + self._git_stored_op = op + return op else: - return 'other' + # try to fallback to stored variable as we don't know if the last + # operation is pull/push + op = getattr(self, '_git_stored_op', 'pull') + return op diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/lib/vcs/backends/git/changeset.py --- a/rhodecode/lib/vcs/backends/git/changeset.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/lib/vcs/backends/git/changeset.py Fri Mar 02 21:57:01 2012 +0200 @@ -247,7 +247,7 @@ iterating commits. """ cmd = 'log --pretty="format: %%H" --name-status -p %s -- "%s"' % ( - '', path + self.id, path ) so, se = self.repository.run_git_command(cmd) ids = re.findall(r'\w{40}', so) diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/lib/vcs/backends/hg/changeset.py --- a/rhodecode/lib/vcs/backends/hg/changeset.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/lib/vcs/backends/hg/changeset.py Fri Mar 02 21:57:01 2012 +0200 @@ -187,9 +187,8 @@ """ Returns last commit of the file at the given ``path``. """ - fctx = self._get_filectx(path) - changeset = self.repository.get_changeset(fctx.linkrev()) - return changeset + node = self.get_node(path) + return node.history[0] def get_file_history(self, path): """ diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/lib/vcs/nodes.py --- a/rhodecode/lib/vcs/nodes.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/lib/vcs/nodes.py Fri Mar 02 21:57:01 2012 +0200 @@ -306,14 +306,14 @@ attribute to indicate that type should *NOT* be calculated). """ if hasattr(self, '_mimetype'): - if (isinstance(self._mimetype,(tuple,list,)) and + if (isinstance(self._mimetype, (tuple, list,)) and len(self._mimetype) == 2): return self._mimetype else: raise NodeError('given _mimetype attribute must be an 2 ' 'element list or tuple') - mtype,encoding = mimetypes.guess_type(self.name) + mtype, encoding = mimetypes.guess_type(self.name) if mtype is None: if self.is_binary: @@ -322,7 +322,7 @@ else: mtype = 'text/plain' encoding = None - return mtype,encoding + return mtype, encoding @LazyProperty def mimetype(self): @@ -392,8 +392,8 @@ """ Returns True if file has binary content. """ - bin = '\0' in self.content - return bin + _bin = '\0' in self.content + return _bin @LazyProperty def extension(self): @@ -406,6 +406,10 @@ """ return bool(self.mode & stat.S_IXUSR) + def __repr__(self): + return '<%s %r @ %s>' % (self.__class__.__name__, self.path, + self.changeset.short_id) + class RemovedFileNode(FileNode): """ @@ -537,6 +541,10 @@ return size + def __repr__(self): + return '<%s %r @ %s>' % (self.__class__.__name__, self.path, + self.changeset.short_id) + class RootNode(DirNode): """ diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/lib/vcs/utils/diffs.py --- a/rhodecode/lib/vcs/utils/diffs.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/lib/vcs/utils/diffs.py Fri Mar 02 21:57:01 2012 +0200 @@ -15,17 +15,17 @@ from rhodecode.lib.vcs.nodes import FileNode, NodeError -def get_udiff(filenode_old, filenode_new,show_whitespace=True): +def get_udiff(filenode_old, filenode_new, show_whitespace=True): """ Returns unified diff between given ``filenode_old`` and ``filenode_new``. """ try: - filenode_old_date = filenode_old.last_changeset.date + filenode_old_date = filenode_old.changeset.date except NodeError: filenode_old_date = None try: - filenode_new_date = filenode_new.last_changeset.date + filenode_new_date = filenode_new.changeset.date except NodeError: filenode_new_date = None diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/model/comment.py --- a/rhodecode/model/comment.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/model/comment.py Fri Mar 02 21:57:01 2012 +0200 @@ -67,7 +67,7 @@ repo = Repository.get(repo_id) cs = repo.scm_instance.get_changeset(revision) desc = cs.message - author = cs.author_email + author_email = cs.author_email comment = ChangesetComment() comment.repo = repo comment.user_id = user_id @@ -92,22 +92,27 @@ ) ) body = text + + # get the current participants of this changeset recipients = ChangesetComment.get_users(revision=revision) - # add changeset author - recipients += [User.get_by_email(author)] - NotificationModel().create(created_by=user_id, subject=subj, - body=body, recipients=recipients, - type_=Notification.TYPE_CHANGESET_COMMENT) + # add changeset author if it's in rhodecode system + recipients += [User.get_by_email(author_email)] + + NotificationModel().create( + created_by=user_id, subject=subj, body=body, + recipients=recipients, type_=Notification.TYPE_CHANGESET_COMMENT + ) mention_recipients = set(self._extract_mentions(body))\ .difference(recipients) if mention_recipients: subj = _('[Mention]') + ' ' + subj - NotificationModel().create(created_by=user_id, subject=subj, - body=body, - recipients=mention_recipients, - type_=Notification.TYPE_CHANGESET_COMMENT) + NotificationModel().create( + created_by=user_id, subject=subj, body=body, + recipients=mention_recipients, + type_=Notification.TYPE_CHANGESET_COMMENT + ) return comment diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/model/db.py --- a/rhodecode/model/db.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/model/db.py Fri Mar 02 21:57:01 2012 +0200 @@ -807,7 +807,9 @@ @property def repositories(self): - return Repository.query().filter(Repository.group == self) + return Repository.query()\ + .filter(Repository.group == self)\ + .order_by(Repository.repo_name) @property def repositories_recursive_count(self): diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/model/notification.py --- a/rhodecode/model/notification.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/model/notification.py Fri Mar 02 21:57:01 2012 +0200 @@ -85,13 +85,19 @@ if obj: recipients_objs.append(obj) recipients_objs = set(recipients_objs) + log.debug('sending notifications %s to %s' % ( + type_, recipients_objs) + ) else: # empty recipients means to all admins recipients_objs = User.query().filter(User.admin == True).all() - - notif = Notification.create(created_by=created_by_obj, subject=subject, - body=body, recipients=recipients_objs, - type_=type_) + log.debug('sending notifications %s to admins: %s' % ( + type_, recipients_objs) + ) + notif = Notification.create( + created_by=created_by_obj, subject=subject, + body=body, recipients=recipients_objs, type_=type_ + ) if with_email is False: return notif @@ -163,10 +169,12 @@ of notification object """ - _map = {notification.TYPE_CHANGESET_COMMENT:_('commented on commit'), - notification.TYPE_MESSAGE:_('sent message'), - notification.TYPE_MENTION:_('mentioned you'), - notification.TYPE_REGISTRATION:_('registered in RhodeCode')} + _map = { + notification.TYPE_CHANGESET_COMMENT: _('commented on commit'), + notification.TYPE_MESSAGE: _('sent message'), + notification.TYPE_MENTION: _('mentioned you'), + notification.TYPE_REGISTRATION: _('registered in RhodeCode') + } DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" @@ -176,9 +184,10 @@ else: DTF = lambda d: datetime.datetime.strftime(d, DATETIME_FORMAT) when = DTF(notification.created_on) - data = dict(user=notification.created_by_user.username, - action=_map[notification.type_], - when=when) + data = dict( + user=notification.created_by_user.username, + action=_map[notification.type_], when=when, + ) return tmpl % data @@ -194,10 +203,10 @@ self._tmpl_lookup = rhodecode.CONFIG['pylons.app_globals'].mako_lookup self.email_types = { - self.TYPE_CHANGESET_COMMENT:'email_templates/changeset_comment.html', - self.TYPE_PASSWORD_RESET:'email_templates/password_reset.html', - self.TYPE_REGISTRATION:'email_templates/registration.html', - self.TYPE_DEFAULT:'email_templates/default.html' + self.TYPE_CHANGESET_COMMENT: 'email_templates/changeset_comment.html', + self.TYPE_PASSWORD_RESET: 'email_templates/password_reset.html', + self.TYPE_REGISTRATION: 'email_templates/registration.html', + self.TYPE_DEFAULT: 'email_templates/default.html' } def get_email_tmpl(self, type_, **kwargs): @@ -210,7 +219,7 @@ base = self.email_types.get(type_, self.email_types[self.TYPE_DEFAULT]) email_template = self._tmpl_lookup.get_template(base) # translator inject - _kwargs = {'_':_} + _kwargs = {'_': _} _kwargs.update(kwargs) log.debug('rendering tmpl %s with kwargs %s' % (base, _kwargs)) return email_template.render(**_kwargs) diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/model/user.py --- a/rhodecode/model/user.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/model/user.py Fri Mar 02 21:57:01 2012 +0200 @@ -531,6 +531,13 @@ """ user = self.__get_user(user) perm = self.__get_perm(perm) + # if this permission is already granted skip it + _perm = UserToPerm.query()\ + .filter(UserToPerm.user == user)\ + .filter(UserToPerm.permission == perm)\ + .scalar() + if _perm: + return new = UserToPerm() new.user = user new.permission = perm @@ -546,7 +553,9 @@ user = self.__get_user(user) perm = self.__get_perm(perm) - obj = UserToPerm.query().filter(UserToPerm.user == user)\ - .filter(UserToPerm.permission == perm).scalar() + obj = UserToPerm.query()\ + .filter(UserToPerm.user == user)\ + .filter(UserToPerm.permission == perm)\ + .scalar() if obj: self.sa.delete(obj) diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/model/users_group.py --- a/rhodecode/model/users_group.py Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/model/users_group.py Fri Mar 02 21:57:01 2012 +0200 @@ -172,6 +172,14 @@ users_group = self.__get_users_group(users_group) + # if this permission is already granted skip it + _perm = UsersGroupToPerm.query()\ + .filter(UsersGroupToPerm.users_group == users_group)\ + .filter(UsersGroupToPerm.permission == perm)\ + .scalar() + if _perm: + return + new = UsersGroupToPerm() new.users_group = users_group new.permission = perm diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/public/js/rhodecode.js --- a/rhodecode/public/js/rhodecode.js Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/public/js/rhodecode.js Fri Mar 02 21:57:01 2012 +0200 @@ -613,16 +613,20 @@ * QUICK REPO MENU */ var quick_repo_menu = function(){ - YUE.on(YUQ('.quick_repo_menu'),'click',function(e){ - var menu = e.currentTarget.firstElementChild.firstElementChild; - if(YUD.hasClass(menu,'hidden')){ - YUD.addClass(e.currentTarget,'active'); - YUD.removeClass(menu,'hidden'); - }else{ - YUD.removeClass(e.currentTarget,'active'); - YUD.addClass(menu,'hidden'); - } - }) + YUE.on(YUQ('.quick_repo_menu'),'mouseenter',function(e){ + var menu = e.currentTarget.firstElementChild.firstElementChild; + if(YUD.hasClass(menu,'hidden')){ + YUD.replaceClass(e.currentTarget,'hidden', 'active'); + YUD.replaceClass(menu, 'hidden', 'active'); + } + }) + YUE.on(YUQ('.quick_repo_menu'),'mouseleave',function(e){ + var menu = e.currentTarget.firstElementChild.firstElementChild; + if(YUD.hasClass(menu,'active')){ + YUD.replaceClass(e.currentTarget, 'active', 'hidden'); + YUD.replaceClass(menu, 'active', 'hidden'); + } + }) }; diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/templates/changeset/raw_changeset.html --- a/rhodecode/templates/changeset/raw_changeset.html Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/templates/changeset/raw_changeset.html Fri Mar 02 21:57:01 2012 +0200 @@ -1,8 +1,9 @@ +%if h.is_hg(c.scm_type): # ${c.scm_type.upper()} changeset patch # User ${c.changeset.author|n} # Date ${c.changeset.date} # Node ID ${c.changeset.raw_id} ${c.parent_tmpl} ${c.changeset.message} - +%endif ${c.diffs|n} diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/templates/files/files_annotate.html --- a/rhodecode/templates/files/files_annotate.html Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/templates/files/files_annotate.html Fri Mar 02 21:57:01 2012 +0200 @@ -34,8 +34,8 @@
${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')} - ${h.hidden('diff2',c.file.last_changeset.raw_id)} - ${h.select('diff1',c.file.last_changeset.raw_id,c.file_history)} + ${h.hidden('diff2',c.file.changeset.raw_id)} + ${h.select('diff1',c.file.changeset.raw_id,c.file_history)} ${h.submit('diff','diff to revision',class_="ui-btn")} ${h.submit('show_rev','show at revision',class_="ui-btn")} ${h.end_form()} @@ -46,7 +46,7 @@
-
${h.link_to("r%s:%s" % (c.file.last_changeset.revision,h.short_id(c.file.last_changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id))}
+
${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))}
${h.format_byte_size(c.file.size,binary=True)}
${c.file.mimetype}
diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/templates/files/files_browser.html --- a/rhodecode/templates/files/files_browser.html Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/templates/files/files_browser.html Fri Mar 02 21:57:01 2012 +0200 @@ -47,7 +47,7 @@ ${_('Name')} ${_('Size')} ${_('Mimetype')} - ${_('Revision')} + ${_('Last Revision')} ${_('Last modified')} ${_('Last commiter')} @@ -70,7 +70,7 @@ %for cnt,node in enumerate(c.file): - ${h.link_to(node.name,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=h.safe_unicode(node.path)),class_=file_class(node)+" ypjax-link")} + ${h.link_to(node.name,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=h.safe_unicode(node.path)),class_=file_class(node)+" ypjax-link")} %if node.is_file(): diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/templates/files/files_edit.html --- a/rhodecode/templates/files/files_edit.html Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/templates/files/files_edit.html Fri Mar 02 21:57:01 2012 +0200 @@ -42,7 +42,7 @@
-
${h.link_to("r%s:%s" % (c.file.last_changeset.revision,h.short_id(c.file.last_changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id))}
+
${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))}
${h.format_byte_size(c.file.size,binary=True)}
${c.file.mimetype}
diff -r 6c6718c06ea2 -r ecd59c28f432 rhodecode/templates/files/files_source.html --- a/rhodecode/templates/files/files_source.html Wed Feb 29 23:11:13 2012 +0200 +++ b/rhodecode/templates/files/files_source.html Fri Mar 02 21:57:01 2012 +0200 @@ -3,8 +3,8 @@
${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')} - ${h.hidden('diff2',c.file.last_changeset.raw_id)} - ${h.select('diff1',c.file.last_changeset.raw_id,c.file_history)} + ${h.hidden('diff2',c.file.changeset.raw_id)} + ${h.select('diff1',c.file.changeset.raw_id,c.file_history)} ${h.submit('diff','diff to revision',class_="ui-btn")} ${h.submit('show_rev','show at revision',class_="ui-btn")} ${h.end_form()} @@ -16,27 +16,27 @@
-
${h.link_to("r%s:%s" % (c.file.last_changeset.revision,h.short_id(c.file.last_changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id))}
+
${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))}
${h.format_byte_size(c.file.size,binary=True)}
${c.file.mimetype}
- ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} - ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} - ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")} % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name): % if not c.file.is_binary: - ${h.link_to(_('edit'),h.url('files_edit_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('edit'),h.url('files_edit_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")} % endif % endif
- gravatar + gravatar
-
${h.person(c.file.last_changeset.author)}
+
${h.person(c.file.changeset.author)}
-
${h.urlify_commit(c.file.last_changeset.message,c.repo_name)}
+
${h.urlify_commit(c.file.changeset.message,c.repo_name)}
%if c.file.is_binary: @@ -46,7 +46,7 @@ ${h.pygmentize(c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")} %else: ${_('File is too big to display')} ${h.link_to(_('show as raw'), - h.url('files_raw_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id,f_path=c.f_path))} + h.url('files_raw_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path))} %endif