2016-11-17 16 views
0

ヒットしたときにgit pullを実行してローカルのgit repoを更新するSinatraサービスがあります。それは書き込みなので、一度に1つだけgit pullが発生します。 pullがすでに発生しているかどうかを効果的に検出するにはどうすればよいですか?現在、.gitディレクトリにindex.lockファイルが存在するかどうかを確認しています。Local Git Repoで複数のプルを処理する

if @file_obj.exists? "#{@data_dir}/.git/index.lock" 
    @log.info('********* LOCKED **********') 
else 
    MUTEX.synchronize do 
    @log.info('********* Inside Sync **********') 
    @executor.run(git_pull_command, in: @data_dir) 
    end 
end 
+0

'@ executor.run'にミューテックスを入れてください。しかし、より良い戦略は、最新のバージョンで終了する可能性があるので、現在の要求を引き続き再起動することです。また、すべてを処理するので、独自のロックファイルを作成することもできます。 – mudasobwa

+1

gitが独自のロックを処理していることは確かです。なぜ単にロックエラーを正常に処理しないのですか? –

答えて

0

index.lockおそらくあなたが心配する必要がある唯一のファイルです。あなたの操作を同期させるためにミューテックスを使用しているので、このコードはうまくいくはずです。

ちょっとindexを単独で制御する必要があるときだけ、index.lockファイルを作成します(他のGitプロセスが物を壊すのを防ぐため)。これはプルが完了している間だけ発生します。

関連する問題