<div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">${_('Strip commits from repository')}</h3> </div> <div class="panel-body"> %if c.rhodecode_db_repo.repo_type != 'svn': <h4>${_('Please provide up to %d commits commits to strip') % c.strip_limit}</h4> <p> ${_('In the first step commits will be verified for existance in the repository')}. </br> ${_('In the second step, correct commits will be available for stripping')}. </p> ${h.secure_form(h.route_path('strip_check', repo_name=c.rhodecode_db_repo.repo_name), request=request)} <div id="change_body" class="field"> <div id="box-1" class="inputx locked_input"> <input class="text" id="changeset_id-1" name="changeset_id-1" size="59" placeholder="${_('Enter full 40 character commit sha')}" type="text" value=""> <div id="plus_icon-1" class="btn btn-default plus_input_button" onclick="addNew(1);return false"> <i class="icon-plus">${_('Add another commit')}</i> </div> </div> </div> <div id="results" style="display:none; padding: 10px 0px;"></div> <div class="buttons"> <button id="strip_action" class="btn btn-small btn-primary" onclick="checkCommits();return false"> ${_('Check commits')} </button> </div> ${h.end_form()} %else: <h4>${_('Sorry this functionality is not available for SVN repository')}</h4> %endif </div> </div> <script> var plus_leaf = 1; addNew = function(number){ if (number >= ${c.strip_limit}){ return; } var minus = '<i class="icon-minus">${_('Remove')}</i>'; $('#plus_icon-'+number).detach(); number++; var input = '<div id="box-'+number+'" class="inputx locked_input">'+ '<input class="text" id="changeset_id-'+number+'" name="changeset_id-'+number+'" size="59" type="text" value=""' + 'placeholder="${_('Enter full 40 character commit sha')}">'+ '<div id="plus_icon-'+number+'" class="btn btn-default plus_input_button" onclick="addNew('+number+');return false">'+ '<i class="icon-plus">${_('Add another commit')}</i>'+ '</div>'+ '<div id="minus_icon-'+number+'" class="btn btn-default minus_input_button" onclick="delOld('+(number)+');return false">'+ minus + '</div>' + '</div>'; $('#change_body').append(input); plus_leaf++; }; reIndex = function(number){ for(var i=number;i<=plus_leaf;i++){ var check = $('#box-'+i); if (check.length == 0){ var change = $('#box-'+(i+1)); change.attr('id','box-'+i); var plus = $('#plus_icon-'+(i+1)); if (plus.length != 0){ plus.attr('id','plus_icon-'+i); plus.attr('onclick','addNew('+i+');return false'); plus_leaf--; } var minus = $('#minus_icon-'+(i+1)); minus.attr('id','minus_icon-'+i); minus.attr('onclick','delOld('+i+');re' + 'turn false'); var input = $('input#changeset_id-'+(i+1)); input.attr('name','changeset_id-'+i); input.attr('id','changeset_id-'+i); } } }; delOld = function(number){ $('#box-'+number).remove(); number = number - 1; var box = $('#box-'+number); var plus = '<div id="plus_icon-'+number+'" class="btn btn-default plus_input_button" onclick="addNew('+number +');return false">'+ '<i id="i_plus_icon-'+number+'" class="icon-plus">${_('Add another commit')}</i></div>'; var minus = $('#minus_icon-'+number); if(number +1 == plus_leaf){ minus.detach(); box.append(plus); box.append(minus); plus_leaf --; } reIndex(number+1); }; var resultData = { 'csrf_token': CSRF_TOKEN }; checkCommits = function() { var postData = $('form').serialize(); $('#results').show(); $('#results').html('<h4>${_('Checking commits')}...</h4>'); var url = "${h.route_path('strip_check', repo_name=c.rhodecode_db_repo.repo_name)}"; var btn = $('#strip_action'); btn.attr('disabled', 'disabled'); btn.addClass('disabled'); var success = function (data) { resultData = { 'csrf_token': CSRF_TOKEN }; var i = 0; var result = '<ol>'; $.each(data, function(index, value){ i= index; var box = $('#box-'+index); if (value.rev){ resultData[index] = JSON.stringify(value); var verifiedHtml = ( '<li style="line-height:1.2em">' + '<code>{0}</code>' + '{1}' + '<div style="white-space:pre">' + 'author: {2}\n' + 'description: {3}' + '</div>' + '</li>').format( value.rev, "${_(' commit verified positive')}", value.author, value.comment ); result += verifiedHtml; } else { var verifiedHtml = ( '<li style="line-height:1.2em">' + '<code><strike>{0}</strike></code>' + '{1}' + '</li>').format( value.commit, "${_(' commit verified negative')}" ); result += verifiedHtml; } box.remove(); }); result += '</ol>'; var box = $('#box-'+(parseInt(i)+1)); box.remove(); $('#results').html(result); }; btn.html('Strip'); btn.removeAttr('disabled'); btn.removeClass('disabled'); btn.attr('onclick','strip();return false;'); ajaxPOST(url, postData, success, null); }; strip = function() { var url = "${h.route_path('strip_execute', repo_name=c.rhodecode_db_repo.repo_name)}"; var success = function(data) { var result = '<h4>Strip executed</h4><ol>'; $.each(data, function(index, value){ if(data[index]) { result += '<li><code>' +index+ '</code> ${_(' commit striped successfully')}' + '</li>'; } else { result += '<li><code>' +index+ '</code> ${_(' commit strip failed')}' + '</li>'; } }); if ($.isEmptyObject(data)) { result += '<li>Nothing done...</li>' } result += '</ol>'; $('#results').html(result); }; ajaxPOST(url, resultData, success, null); var btn = $('#strip_action'); btn.remove(); }; </script>