2016-11-17 32 views
0

我有Sinatra服務,它在命中時執行git pull來更新本地git回購。由於它是一個寫,我一次只想要一個git pull發生。如何有效檢測pull是否已經發生?目前我只是檢查index.lock文件是否存在於.git目錄中。在本地Git回覆中處理多個拉動

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'上放置一個互斥鎖。但是,更好的策略是_calnel_ current在後續請求上拉動並重新啓動它,因爲您可能想要獲得最新版本。另外,由於您處理所有事情,您可能需要創建自己的鎖定文件。 – mudasobwa

+1

我很確定git處理自己的鎖定。爲什麼不恰當地處理鎖定錯誤? –

回答

0

index.lock可能是您需要擔心的唯一文件。由於您正在使用互斥鎖來同步您的操作,因此此代碼應該沒問題。

的Git只有真正創建index.lock文件時,它需要有在index一會兒獨家控制權(並防止其他Git的過程從重挫的東西)。這隻會在拉完成時發生。