##// END OF EJS Templates
caches: use individual namespaces per user to prevent beaker caching problems....
caches: use individual namespaces per user to prevent beaker caching problems. - especially for mysql in case large number of data in caches there could be critical errors storing cache, and thus preventing users from authentication. This is caused by the fact that we used single namespace for ALL users. It means it grew as number of users grew reaching mysql single column limit. This changes the behaviour and now we use namespace per-user it means that each user-id will have it's own cache namespace fragmenting maximum column data to a single user cache. Which we should never reach.

File last commit:

r2486:669f4133 default
r2591:36829a17 stable
Show More
changelog.mako
314 lines | 12.5 KiB | application/x-mako | MakoHtmlLexer
## -*- coding: utf-8 -*-
<%inherit file="/base/base.mako"/>
<%def name="title()">
${_('%s Changelog') % c.repo_name}
%if c.changelog_for_path:
/${c.changelog_for_path}
%endif
%if c.rhodecode_name:
&middot; ${h.branding(c.rhodecode_name)}
%endif
</%def>
<%def name="breadcrumbs_links()">
%if c.changelog_for_path:
/${c.changelog_for_path}
%endif
</%def>
<%def name="menu_bar_nav()">
${self.menu_items(active='repositories')}
</%def>
<%def name="menu_bar_subnav()">
${self.repo_menu(active='changelog')}
</%def>
<%def name="main()">
<div class="box">
<div class="title">
${self.repo_page_title(c.rhodecode_db_repo)}
<ul class="links">
<li>
<a href="#" class="btn btn-small" id="rev_range_container" style="display:none;"></a>
%if c.rhodecode_db_repo.fork:
<span>
<a id="compare_fork_button"
title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
class="btn btn-small"
href="${h.route_path('repo_compare',
repo_name=c.rhodecode_db_repo.fork.repo_name,
source_ref_type=c.rhodecode_db_repo.landing_rev[0],
source_ref=c.rhodecode_db_repo.landing_rev[1],
target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
_query=dict(merge=1, target_repo=c.repo_name))}"
>
${_('Compare fork with Parent (%s)' % c.rhodecode_db_repo.fork.repo_name)}
</a>
</span>
%endif
## pr open link
%if h.is_hg(c.rhodecode_repo) or h.is_git(c.rhodecode_repo):
<span>
<a id="open_new_pull_request" class="btn btn-small btn-success" href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">
${_('Open new pull request')}
</a>
</span>
%endif
## clear selection
<div title="${_('Clear selection')}" class="btn" id="rev_range_clear" style="display:none">
${_('Clear selection')}
</div>
</li>
</ul>
</div>
% if c.pagination:
<script type="text/javascript" src="${h.asset('js/src/plugins/jquery.commits-graph.js')}"></script>
<div class="graph-header">
<div id="filter_changelog">
${h.hidden('branch_filter')}
%if c.selected_name:
<div class="btn btn-default" id="clear_filter" >
${_('Clear filter')}
</div>
%endif
</div>
${self.breadcrumbs('breadcrumbs_light')}
<div class="pull-right">
% if h.is_hg(c.rhodecode_repo):
% if c.show_hidden:
<a class="action-link" href="${h.current_route_path(request, evolve=0)}">${_('Hide obsolete/hidden')}</a>
% else:
<a class="action-link" href="${h.current_route_path(request, evolve=1)}">${_('Show obsolete/hidden')}</a>
% endif
% else:
<span class="action-link disabled">${_('Show hidden')}</span>
% endif
</div>
<div id="commit-counter" data-total=${c.total_cs} class="pull-right">
${_ungettext('showing %d out of %d commit', 'showing %d out of %d commits', c.showing_commits) % (c.showing_commits, c.total_cs)}
</div>
</div>
<div id="graph">
<div class="graph-col-wrapper">
<div id="graph_nodes">
<div id="graph_canvas"></div>
</div>
<div id="graph_content" class="main-content graph_full_width">
<div class="table">
<table id="changesets" class="rctable">
<tr>
## checkbox
<th></th>
<th colspan="2"></th>
<th>${_('Commit')}</th>
## Mercurial phase/evolve state
<th></th>
## commit message expand arrow
<th></th>
<th>${_('Commit Message')}</th>
<th>${_('Age')}</th>
<th>${_('Author')}</th>
<th>${_('Refs')}</th>
</tr>
<tbody class="commits-range">
<%include file='changelog_elements.mako'/>
</tbody>
</table>
</div>
</div>
<div class="pagination-wh pagination-left">
${c.pagination.pager('$link_previous ~2~ $link_next')}
</div>
</div>
<script type="text/javascript">
var cache = {};
$(function(){
// Create links to commit ranges when range checkboxes are selected
var $commitCheckboxes = $('.commit-range');
// cache elements
var $commitRangeContainer = $('#rev_range_container');
var $commitRangeClear = $('#rev_range_clear');
var checkboxRangeSelector = function(e){
var selectedCheckboxes = [];
for (pos in $commitCheckboxes){
if($commitCheckboxes[pos].checked){
selectedCheckboxes.push($commitCheckboxes[pos]);
}
}
var open_new_pull_request = $('#open_new_pull_request');
if(open_new_pull_request){
var selected_changes = selectedCheckboxes.length;
if (selected_changes > 1 || selected_changes == 1 && templateContext.repo_type == 'svn') {
open_new_pull_request.hide();
} else {
if (selected_changes == 1) {
open_new_pull_request.html(_gettext('Open new pull request for selected commit'));
} else if (selected_changes == 0) {
open_new_pull_request.html(_gettext('Open new pull request'));
}
open_new_pull_request.show();
}
}
if (selectedCheckboxes.length>0){
var revEnd = selectedCheckboxes[0].name;
var revStart = selectedCheckboxes[selectedCheckboxes.length-1].name;
var url = pyroutes.url('repo_commit',
{'repo_name': '${c.repo_name}',
'commit_id': revStart+'...'+revEnd});
var link = (revStart == revEnd)
? _gettext('Show selected commit __S')
: _gettext('Show selected commits __S ... __E');
link = link.replace('__S', revStart.substr(0,6));
link = link.replace('__E', revEnd.substr(0,6));
$commitRangeContainer
.attr('href',url)
.html(link)
.show();
$commitRangeClear.show();
var _url = pyroutes.url('pullrequest_new',
{'repo_name': '${c.repo_name}',
'commit': revEnd});
open_new_pull_request.attr('href', _url);
$('#compare_fork_button').hide();
} else {
$commitRangeContainer.hide();
$commitRangeClear.hide();
%if c.branch_name:
var _url = pyroutes.url('pullrequest_new',
{'repo_name': '${c.repo_name}',
'branch':'${c.branch_name}'});
open_new_pull_request.attr('href', _url);
%else:
var _url = pyroutes.url('pullrequest_new',
{'repo_name': '${c.repo_name}'});
open_new_pull_request.attr('href', _url);
%endif
$('#compare_fork_button').show();
}
};
$commitCheckboxes.on('click', checkboxRangeSelector);
$commitRangeClear.on('click',function(e) {
$commitCheckboxes.attr('checked', false);
checkboxRangeSelector();
e.preventDefault();
});
// make sure the buttons are consistent when navigate back and forth
checkboxRangeSelector();
var msgs = $('.message');
// get first element height
var el = $('#graph_content .container')[0];
var row_h = el.clientHeight;
for (var i=0; i < msgs.length; i++) {
var m = msgs[i];
var h = m.clientHeight;
var pad = $(m).css('padding');
if (h > row_h) {
var offset = row_h - (h+12);
$(m.nextElementSibling).css('display','block');
$(m.nextElementSibling).css('margin-top',offset+'px');
}
}
$("#clear_filter").on("click", function() {
var filter = {'repo_name': '${c.repo_name}'};
window.location = pyroutes.url('repo_changelog', filter);
});
$("#branch_filter").select2({
'dropdownAutoWidth': true,
'width': 'resolve',
'placeholder': "${c.selected_name or _('Filter changelog')}",
containerCssClass: "drop-menu",
dropdownCssClass: "drop-menu-dropdown",
query: function(query){
var key = 'cache';
var cached = cache[key] ;
if(cached) {
var data = {results: []};
//filter results
$.each(cached.results, function(){
var section = this.text;
var children = [];
$.each(this.children, function(){
if(query.term.length == 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0 ){
children.push({'id': this.id, 'text': this.text, 'type': this.type})
}
});
data.results.push({'text': section, 'children': children});
query.callback({results: data.results});
});
}else{
$.ajax({
url: pyroutes.url('repo_refs_changelog_data', {'repo_name': '${c.repo_name}'}),
data: {},
dataType: 'json',
type: 'GET',
success: function(data) {
cache[key] = data;
query.callback({results: data.results});
}
})
}
}
});
$('#branch_filter').on('change', function(e){
var data = $('#branch_filter').select2('data');
//type: branch_closed
var selected = data.text;
var filter = {'repo_name': '${c.repo_name}'};
if(data.type == 'branch' || data.type == 'branch_closed'){
filter["branch"] = selected;
if (data.type == 'branch_closed') {
filter["evolve"] = '1';
}
}
else if (data.type == 'book'){
filter["bookmark"] = selected;
}
window.location = pyroutes.url('repo_changelog', filter);
});
commitsController = new CommitsController();
% if not c.changelog_for_path:
commitsController.reloadGraph();
% endif
});
</script>
</div>
% else:
${_('There are no changes yet')}
% endif
</div>
</%def>