2013-09-27 111 views
0

在我的項目中,我不時地使用幾個不同的git存儲庫,我需要git pull。我想更新這些並行的速度。在shell腳本中,合併輸出可以交錯,以至於我不知道哪些存儲庫實際上已更新。所以我用忍者(用於緩存的輸出,直到命令完成,然後輸出他們在命令完成的順序)使用下面的CMake的腳本:互斥並行

cmake_minimum_required(VERSION 2.8.8) 
project("gitupdate" NONE) 
find_package(Git) 

function(update_git _dir _remote _branch) 
    set(_fulldir "${PROJECT_SOURCE_DIR}/${_dir}") 

    add_custom_target("${_dir}-${_remote}-${_branch}" ALL 
    WORKING_DIRECTORY ${_fulldir} 
    COMMAND ${GIT_EXECUTABLE} pull ${_remote} ${_branch} 
    COMMENT "Updating ${_dir} ${_remote} ${_branch}..." 
    VERBATIM 
) 
endfunction() 

這工作得很好,直到我有一個Git目錄,從多個更新遙控器。例如。

update_git(subproject remoteA master) 
update_git(subproject remoteB master) 

我可以告訴CMake不要同時執行這些目標嗎? PS:從Ninja緩存的輸出中消失了Git語法着色。有沒有機會保留這些?

+0

着色可通過使GIT中回收命令標誌'--color = always',這樣它會忽視的事實是它的輸出不直接進入到TTY。 – Novelocrat

+0

@Novelocrat不起作用:'error:unknown option'color = always''。 'git config --global color.ui always'也不起作用。請注意,這是MSYS bash --rxvt。 Windows終端不理解ANSI轉義碼,不瞭解rxvt。 – Meinersbur

回答

0

使生成的自定義目標相互依賴。這應該迫使忍者執行目標順序:

update_git(subproject remoteA master) 
update_git(subproject remoteB master) 
add_dependencies(subproject-remoteA-master subproject-remoteB-master)