Я написал простой класс JavaScript, который реализует технику, аналогичную той, которая описана в ht-файле answer . Надеюсь, это может быть полезно кому-то здесь. Проект GitHub называется response-monitor.js
По умолчанию он использует spin.js в качестве индикатора ожидания, но также предоставляет набор обратных вызовов для реализации пользовательского индикатора.
JQuery поддерживается, но не требуется.
Известные функции
Пример использования
HTML
Link 1 (Timeout: 30s)
Link 2 (Timeout: 10s)
Клиент (обычный JavaScript)
//registering multiple anchors at once
var my_anchors = document.getElementsByClassName('my_anchors');
ResponseMonitor.register(my_anchors); //clicking on the links initiates monitoring
//registering a single form
var my_form = document.getElementById('my_form');
ResponseMonitor.register(my_form); //the submit event will be intercepted and monitored
Клиент (JQuery)
$('.my_anchors').ResponseMonitor();
$('#my_form').ResponseMonitor({timeout: 20});
Клиент с обратными вызовами (JQuery)
//when options are defined, the default spin.js integration is bypassed
var options = {
onRequest: function(token){
$('#cookie').html(token);
$('#outcome').html('');
$('#duration').html('');
},
onMonitor: function(countdown){
$('#duration').html(countdown);
},
onResponse: function(status){
$('#outcome').html(status==1?'success':'failure');
},
onTimeout: function(){
$('#outcome').html('timeout');
}
};
//monitor all anchors in the document
$('a').ResponseMonitor(options);
Сервер (PHP)
$cookiePrefix = 'response-monitor'; //must match the one set on the client options
$tokenValue = $_GET[$cookiePrefix];
$cookieName = $cookiePrefix.'_'.$tokenValue; //ex: response-monitor_1419642741528
//this value is passed to the client through the ResponseMonitor.onResponse callback
$cookieValue = 1; //for ex, "1" can interpret as success and "0" as failure
setcookie(
$cookieName,
$cookieValue,
time()+300, // expire in 5 minutes
"/",
$_SERVER["HTTP_HOST"],
true,
false
);
header('Content-Type: text/plain');
header("Content-Disposition: attachment; filename=\"Response.txt\"");
sleep(5); //simulate whatever delays the response
print_r($_REQUEST); //dump the request in the text file
Для получения дополнительных примеров проверьте папку examples в репозитории.
Рассматривали ли вы использование svn merge?
Для репозитория, подобного этому:
trunk/a_folder/foo
trunk/a_folder/bar
trunk/new_folder/baz
используйте эти команды для объединения каталогов foo и bar:
cd trunk/new_folder
svn merge -r1:HEAD http://svn/repo/trunk/a_folder .
Вы очень, очень близки:
svn copy -m"Copy Directory" file:///path/to/a_folder file:///path/to/another_folder
просто отбросьте /*
из первого аргумента.
Поскольку Вы, конечно, обнаружили, копирование к целевому каталогу, который уже существует , не будет работать:
svn cp svn://my_project/vendor/1.1 svn://my_project/trunk
, потому что соединительная линия уже существует, таким образом, Вы закончили бы с:
svn://my_project/trunk/1.1
Используя [1 117] слияние имеет неудачное свойство не хранения истории поставщика 1,1 тега в подрывной деятельности до 1,5, который представил отслеживание слияния. Вы не можете заботиться. В этом случае слияние было бы правильным решением:
svn co svn://my_project/trunk trunk-wc svn merge svn://my_project/trunk svn://my_project/vendor/1.1 trunk-wc
лучший способ считать это слияние: Сначала определите изменения, необходимые для сделать trunk
идентичный vendor/1.1
, затем применить те изменения в данной рабочей копии (также соединительной линии, в этом случае).
я должен указать, что это слияние эффективно сдует что-либо, что было в соединительной линии ранее. Так, если Вы будете иметь локальный (непоставщик) модификации уже на соединительной линии, Вы захотите применить просто изменения между 1,1 и предыдущее отбрасывание поставщика:
svn co svn://my_project/trunk trunk-wc svn merge svn://my_project/vendor/1.0 svn://my_prjoect/vendor/1.1 trunk-wc
, Если соединительная линия существует, но пуста , у Вас есть два варианта: замените соединительную линию или запишите немного цикла оболочки:
Замена соединительной линии похожа на это:
svn rm svn://my_project/trunk svn cp svn://my_project/vendor/1.1 svn://my_project/trunk
Усиление оболочки (удар):
svn co svn://my_project/trunk trunk svn co svn://my_project/vendor/1.1 1.1 ( cd 1.1 for x in * ; do svn cp $x ../trunk done ) svn ci trunk