This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMake".
The branch, next has been updated via cbd2444b399f30af625b57ca3c1b1a26ac5ec020 (commit) via 64d78bd6ac14c6067dfc2a9a8d572b662364d55f (commit) via 49bed21adc6c78067af3768fb18a2e04e9ce12bf (commit) from f376a82b9fc79ff961b35c753c2b2beef546be7e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cbd2444b399f30af625b57ca3c1b1a26ac5ec020 commit cbd2444b399f30af625b57ca3c1b1a26ac5ec020 Merge: f376a82 64d78bd Author: Daniele E. Domenichelli <daniele.domeniche...@gmail.com> AuthorDate: Thu Mar 27 11:48:47 2014 -0400 Commit: CMake Topic Stage <kwro...@kitware.com> CommitDate: Thu Mar 27 11:48:47 2014 -0400 Merge topic 'ExternalProject_GitUpdate' into next 64d78bd6 ExternalProject: Better handling of git remote branches 49bed21a ExternalProject: Strip trailing space from git hash http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=64d78bd6ac14c6067dfc2a9a8d572b662364d55f commit 64d78bd6ac14c6067dfc2a9a8d572b662364d55f Author: Daniele E. Domenichelli <daniele.domeniche...@iit.it> AuthorDate: Mon Nov 18 11:36:18 2013 +0100 Commit: Daniele E. Domenichelli <daniele.domeniche...@iit.it> CommitDate: Thu Mar 27 15:59:22 2014 +0100 ExternalProject: Better handling of git remote branches ExternalProject handles git remote branches by commit hash. Due to this, the git repository ends in detached states, and local commits are discarded. This patch uses "git pull --rebase" for remote branches instead of git checkout. If there are local changes, "git stash" is used to save the changes and restore them after the pull. If any of these operation fails, it tries to restore the original status and exits with a fatal error, asking the user to resolve the conflicts manually. This also makes the behaviour of ExternalProject using git more similar to the svn version, and probably more likely to what the user expects by setting GIT_TAG to a branch. diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index e56cc37..bbf2193 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -494,13 +494,94 @@ if(error_code OR is_remote_ref OR NOT (\"\${tag_sha}\" STREQUAL \"\${head_sha}\" message(FATAL_ERROR \"Failed to fetch repository '${git_repository}'\") endif() - execute_process( - COMMAND \"${git_EXECUTABLE}\" checkout ${git_tag} - WORKING_DIRECTORY \"${work_dir}\" - RESULT_VARIABLE error_code - ) - if(error_code) - message(FATAL_ERROR \"Failed to checkout tag: '${git_tag}'\") + if(is_remote_ref) + # Check if stash is needed + execute_process( + COMMAND \"${git_EXECUTABLE}\" status --porcelain + WORKING_DIRECTORY \"${work_dir}\" + RESULT_VARIABLE error_code + OUTPUT_VARIABLE repo_status + ) + if(error_code) + message(FATAL_ERROR \"Failed to get the status\") + endif() + string(LENGTH \"\${repo_status}\" need_stash) + + # If not in clean state, stash changes in order to be able to be able to + # perform git pull --rebase + if(need_stash) + execute_process( + COMMAND \"${git_EXECUTABLE}\" stash --all --quiet + WORKING_DIRECTORY \"${work_dir}\" + RESULT_VARIABLE error_code + ) + if(error_code) + message(FATAL_ERROR \"Failed to stash changes\") + endif() + endif() + + # Pull changes from the remote branch + execute_process( + COMMAND \"${git_EXECUTABLE}\" pull --rebase origin ${git_tag} + WORKING_DIRECTORY \"${work_dir}\" + RESULT_VARIABLE error_code + ) + if(error_code) + # Rebase failed: Restore previous state. + execute_process( + COMMAND \"${git_EXECUTABLE}\" rebase --abort + WORKING_DIRECTORY \"${work_dir}\" + ) + if(need_stash) + execute_process( + COMMAND \"${git_EXECUTABLE}\" stash pop --index --quiet + WORKING_DIRECTORY \"${work_dir}\" + ) + endif() + message(FATAL_ERROR \"\\nFailed to rebase in: '${work_dir}/${src_name}'.\\nYou will have to resolve the conflicts manually\") + endif() + + if(need_stash) + execute_process( + COMMAND \"${git_EXECUTABLE}\" stash pop --index --quiet + WORKING_DIRECTORY \"${work_dir}\" + RESULT_VARIABLE error_code + ) + if(error_code) + # Stash pop --index failed: Try again dropping the index + execute_process( + COMMAND \"${git_EXECUTABLE}\" reset --hard --quiet + WORKING_DIRECTORY \"${work_dir}\" + RESULT_VARIABLE error_code + ) + execute_process( + COMMAND \"${git_EXECUTABLE}\" stash pop --quiet + WORKING_DIRECTORY \"${work_dir}\" + RESULT_VARIABLE error_code + ) + if(error_code) + # Stash pop failed: Restore previous state. + execute_process( + COMMAND \"${git_EXECUTABLE}\" reset --hard --quiet \${head_sha} + WORKING_DIRECTORY \"${work_dir}\" + ) + execute_process( + COMMAND \"${git_EXECUTABLE}\" stash pop --index --quiet + WORKING_DIRECTORY \"${work_dir}\" + ) + message(FATAL_ERROR \"\\nFailed to unstash changes in: '${work_dir}/${src_name}'.\\nYou will have to resolve the conflicts manually\") + endif() + endif() + endif() + else() + execute_process( + COMMAND \"${git_EXECUTABLE}\" checkout ${git_tag} + WORKING_DIRECTORY \"${work_dir}\" + RESULT_VARIABLE error_code + ) + if(error_code) + message(FATAL_ERROR \"Failed to checkout tag: '${git_tag}'\") + endif() endif() execute_process( http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=49bed21adc6c78067af3768fb18a2e04e9ce12bf commit 49bed21adc6c78067af3768fb18a2e04e9ce12bf Author: Daniele E. Domenichelli <daniele.domeniche...@iit.it> AuthorDate: Mon Nov 18 12:03:58 2013 +0100 Commit: Daniele E. Domenichelli <daniele.domeniche...@iit.it> CommitDate: Thu Mar 27 15:59:22 2014 +0100 ExternalProject: Strip trailing space from git hash diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index 8235dda..e56cc37 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -454,6 +454,7 @@ execute_process( WORKING_DIRECTORY \"${work_dir}\" RESULT_VARIABLE error_code OUTPUT_VARIABLE head_sha + OUTPUT_STRIP_TRAILING_WHITESPACE ) if(error_code) message(FATAL_ERROR \"Failed to get the hash for HEAD\") @@ -479,6 +480,7 @@ execute_process( WORKING_DIRECTORY \"${work_dir}\" RESULT_VARIABLE error_code OUTPUT_VARIABLE tag_sha + OUTPUT_STRIP_TRAILING_WHITESPACE ) # Is the hash checkout out that we want? ----------------------------------------------------------------------- Summary of changes: Modules/ExternalProject.cmake | 97 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 90 insertions(+), 7 deletions(-) hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-commits