2013-09-27 3 views
0

내 프로젝트에서 나는 때때로 git pull에 필요한 여러 가지 자식 리파지토리를 사용한다. 나는 이것을 위해 병렬로 업데이트하고 싶다. 쉘 스크립트에서 병합 출력은 실제로 리포지토리가 업데이트되었는지 알지 못하도록 인터리브 할 수 있습니다. 그래서 닌자 사용 (명령이 완료 될 때까지 출력을 캐시하고 다음 명령이 완료 순서대로 출력) 다음 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() 

이 잘 작동을하는 여러에서 업데이트 리모트. 예 :

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

나는 어떻게해서 CMake에게 이들 대상을 동시에 실행하지 말라고 할 수 있습니까?

PS : Git 구문 채색이 Ninja에서 캐시 된 출력에서 ​​사라졌습니다. 이것들을 지킬 기회가 있습니까?

+0

git 명령에 플래그 '--color = always'를 전달하여 채색을 복구 할 수 있으므로 출력이 직접 진행되지 않는다는 사실을 무시합니다 TTY에. – Novelocrat

+0

@Novelocrat 작동하지 않습니다 :'error : 알 수없는 옵션'color = always''. 'git config --global color.ui always'도 작동하지 않습니다. 이것은 MSYS bash --rxvt입니다. Windows 터미널은 ANSI 이스케이프 코드를 인식하지 못합니다. rxvt에 대해서는 알지 못합니다. – Meinersbur

답변

0

생성 된 사용자 지정 대상을 서로 종속 시키십시오. 이렇게하면 Ninja가 대상을 순차적으로 실행해야합니다.