2015-01-30 35 views

cevap

6

, diğer şeyler arasında, Arayabileceğin bir end() yöntemi vardır bir nesne döndürür gulp.watch() fonksiyonu - glob-watcher modülünde tanımını bakın. Biz izlerken başladığında

Gist with this code here

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']); 
yüzden izleyici nesneye bir başvuru tutun ve koşma eğer Gözetmenin durdurmak için bir görev var:

Bu satırlar boyunca bir şey yapabiliriz. Git görevimiz, başlamak için watch:stop belgesine bağlıdır ve ardından, tamamlanıncaya kadar geri çağırma ile Git onayını başlatır. Geri arama, watch:start görevini başlatır ve bu işlem bittiğinde, git:checkout'un bittiğini belirtmek için son olarak cb işlevini başlatırız!

Bir alternatif, nesneyi yok etmek ve yeniden oluşturmak yerine, saat nesnesinde add(pattern) ve remove(pattern) kullanarak kapatıp yeniden açabilir.

+0

Thats great! Ama ben gulp komut dosyasından gitmiyordum. ... Ve, gulp gözlemcileri gulp görevlerini tekmeliyorlar çünkü git checkout çalışma kopya dosyalarını yeniden yazıyor. İlk olarak bir git checkout'un aktif olup olmadığını kontrol etmenin bir yolunu arıyorum (belki bir .git/checkout.lock dosyası var mı yoksa benzer bir şey mi?) Ve bekçinin git checkout bitene kadar geçici olarak görevlerini çalıştırmasını engeller. çalışma kopyası – enorl76

+0

Bir kilit dosya mekanizması var - teknik detaylar için [bu belge] 'ye (https://github.com/git/git/blob/master/Documentation/technical/api-lockfile.txt) bakınız. Ama Git temel işlemler için bir kilit dosyası kullanmıyor, sadece git rebase gibi daha uzun görevler için kullanılıyormuş gibi görünüyor. Ayrıca, olayları tutarlı tutması gerektiği için okuma eylemlerini de durdurmaz. – spiralx

+0

Git işleminin kontrolünü elinizde tutuyorsanız, Gulp izleyicinin bir soket üzerinde dinlenmesini ve "askıya al" ve "devam" mesajlarını kabul etmesini sağlamak mümkün olacaktır. Git işleminden önce askıya alabilir ve tamamlandıktan sonra devam edebilirsiniz. – spiralx