Приостановка просмотра файлов до завершения проверки git
Что делает git при запуске операции оформления заказа? Это записывает файл блокировки или что-то?
Я использую gulp, и мне бы хотелось, чтобы он приостановил работу наблюдателей, если git активно выполняет операцию извлечения.
Я согласен с тем, что мне, возможно, придется "перезаписать" что-то, чтобы запустить механизм просмотра файлов.
1 ответ
Функция gulp.watch()
возвращает объект, который, помимо прочего, имеет end()
метод, который вы можете вызвать - см. определение в модуле glob-watcher.
Вы могли бы сделать что-то вроде этого:
var gulp = require('gulp');
function doGitCheckout(callback) {
console.log('doing checkout...');
setTimeout(function() {
console.log('done checkout...');
callback();
}, 1000);
}
var watcher;
gulp.task('watch:start', function() {
if (!watcher) {
watcher = gulp.watch('dist/**/*', ['build']);
console.log('started watcher');
}
});
gulp.task('watch:stop', function() {
if (watcher) {
watcher.end();
watcher = null;
console.log('stopped watcher');
}
});
gulp.task('git:checkout', ['watch:stop'], function(cb) {
console.log('isWatching = ' + !!watcher);
// Start the Git checkout...
doGitCheckout(function() {
// The Git checkout is finished!
gulp.start('watch:start', function() {
cb();
});
});
});
gulp.task('default', ['watch:start', 'git:checkout']);
Поэтому мы сохраняем ссылку на объект-наблюдатель, когда начинаем наблюдать, и имеем задачу остановить наблюдателя, если он запущен. Наша задача Git зависит от watch:stop
начать, а затем начинает проверку Git с обратным вызовом, когда он будет завершен. Обратный вызов запускает задачу watch:start
и когда это будет сделано, мы, наконец, запустим функцию cb
указать, что git:checkout
закончил!
Альтернативой может быть использование add(pattern)
а также remove(pattern)
на объекте наблюдения, чтобы выключить, а затем снова включить вместо того, чтобы уничтожить объект и воссоздать его.