diff options
author | Brad King <brad.king@kitware.com> | 2010-05-04 09:35:27 -0400 |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2010-05-04 09:40:04 -0400 |
commit | 67277bacca15047405a1185d2271ba81b553bdae (patch) | |
tree | d2eca7c94103e0006cc5e2c4cfa9911ab138d964 /Tests | |
parent | f20fd583d8fcc9527de997db3808a75ed9624b90 (diff) | |
download | cmake-67277bacca15047405a1185d2271ba81b553bdae.tar.gz |
Teach ctest_update about Git submodules
Git does not automatically checkout the matching version of a submodule
when it checks out a new version of the parent project in the work tree.
If the submodule reference changed in the parent project then we were
reporting the submodule path as a local modification. Work around the
problem in ctest_update using "git submodule update" after "git pull".
For projects with no submodules this is a no-op. See issue #10662.
Also add a submodule to the test project for CTest.UpdateGIT to test the
work-around.
Diffstat (limited to 'Tests')
-rw-r--r-- | Tests/CTestUpdateCommon.cmake | 4 | ||||
-rw-r--r-- | Tests/CTestUpdateGIT.cmake.in | 69 |
2 files changed, 71 insertions, 2 deletions
diff --git a/Tests/CTestUpdateCommon.cmake b/Tests/CTestUpdateCommon.cmake index 94c37fe75b..266f4b3bd5 100644 --- a/Tests/CTestUpdateCommon.cmake +++ b/Tests/CTestUpdateCommon.cmake @@ -41,8 +41,8 @@ function(check_updates build) # Compare expected and actual entries set(EXTRA "${UPDATE_XML_ENTRIES}") - list(REMOVE_ITEM EXTRA ${ARGN} ${UPDATE_MAYBE}) - set(MISSING "${ARGN}") + list(REMOVE_ITEM EXTRA ${ARGN} ${UPDATE_EXTRA} ${UPDATE_MAYBE}) + set(MISSING "${ARGN}" ${UPDATE_EXTRA}) list(REMOVE_ITEM MISSING ${UPDATE_XML_ENTRIES}) if(NOT UPDATE_NOT_GLOBAL) diff --git a/Tests/CTestUpdateGIT.cmake.in b/Tests/CTestUpdateGIT.cmake.in index c721bb4e6d..f0a577084a 100644 --- a/Tests/CTestUpdateGIT.cmake.in +++ b/Tests/CTestUpdateGIT.cmake.in @@ -5,6 +5,7 @@ # Test in a directory next to this script. get_filename_component(TOP "${CMAKE_CURRENT_LIST_FILE}" PATH) set(TOP "${TOP}/@CTestUpdateGIT_DIR@") +set(UPDATE_EXTRA Updated{module}) # Include code common to all update tests. include("@CMAKE_CURRENT_SOURCE_DIR@/CTestUpdateCommon.cmake") @@ -42,6 +43,35 @@ run_child( file(REMOVE_RECURSE ${TOP}/repo.git/hooks) set(REPO file://${TOP}/repo.git) +# Create submodule repository. +message("Creating submodule...") +file(MAKE_DIRECTORY ${TOP}/module.git) +run_child( + WORKING_DIRECTORY ${TOP}/module.git + COMMAND ${GIT} --bare init + ) +file(REMOVE_RECURSE ${TOP}/module.git/hooks) +set(MOD_REPO file://${TOP}/module.git) +create_content(module) +run_child(WORKING_DIRECTORY ${TOP}/module + COMMAND ${GIT} init + ) +file(REMOVE_RECURSE ${TOP}/module/.git/hooks) +file(APPEND ${TOP}/module/.git/config " +[remote \"origin\"] +\turl = ${MOD_REPO} +\tfetch = +refs/heads/*:refs/remotes/origin/* +${AUTHOR_CONFIG}") +run_child(WORKING_DIRECTORY ${TOP}/module + COMMAND ${GIT} add . + ) +run_child(WORKING_DIRECTORY ${TOP}/module + COMMAND ${GIT} commit -m "Initial content" + ) +run_child(WORKING_DIRECTORY ${TOP}/module + COMMAND ${GIT} push origin master:refs/heads/master + ) + #----------------------------------------------------------------------------- # Import initial content into the repository. message("Importing content...") @@ -61,6 +91,9 @@ run_child(WORKING_DIRECTORY ${TOP}/import COMMAND ${GIT} add . ) run_child(WORKING_DIRECTORY ${TOP}/import + COMMAND ${GIT} submodule add ${MOD_REPO} module + ) +run_child(WORKING_DIRECTORY ${TOP}/import COMMAND ${GIT} commit -m "Initial content" ) run_child(WORKING_DIRECTORY ${TOP}/import @@ -68,6 +101,19 @@ run_child(WORKING_DIRECTORY ${TOP}/import ) #----------------------------------------------------------------------------- +# Modify the submodule. +change_content(module) +run_child(WORKING_DIRECTORY ${TOP}/module + COMMAND ${GIT} add -u + ) +run_child(WORKING_DIRECTORY ${TOP}/module + COMMAND ${GIT} commit -m "Changed content" + ) +run_child(WORKING_DIRECTORY ${TOP}/module + COMMAND ${GIT} push origin master:refs/heads/master + ) + +#----------------------------------------------------------------------------- # Create a working tree. message("Checking out revision 1...") run_child( @@ -76,6 +122,14 @@ run_child( ) file(REMOVE_RECURSE ${TOP}/user-source/.git/hooks) file(APPEND ${TOP}/user-source/.git/config "${AUTHOR_CONFIG}") +run_child( + WORKING_DIRECTORY ${TOP}/user-source + COMMAND ${GIT} submodule init + ) +run_child( + WORKING_DIRECTORY ${TOP}/user-source + COMMAND ${GIT} submodule update + ) #----------------------------------------------------------------------------- # Make changes in the working tree. @@ -95,6 +149,9 @@ run_child( WORKING_DIRECTORY ${TOP}/user-source COMMAND ${GIT} rm ${files_removed} ) +run_child(WORKING_DIRECTORY ${TOP}/user-source/module + COMMAND ${GIT} checkout master + ) run_child( WORKING_DIRECTORY ${TOP}/user-source COMMAND ${GIT} add -u @@ -140,6 +197,10 @@ run_child( WORKING_DIRECTORY ${TOP}/user-source COMMAND ${GIT} reset --hard master~2 ) +run_child( + WORKING_DIRECTORY ${TOP}/user-source + COMMAND ${GIT} submodule update + ) # Make sure pull does not try to rebase (which does not work with # modified files) even if ~/.gitconfig sets "branch.master.rebase". @@ -181,6 +242,14 @@ execute_process( WORKING_DIRECTORY \"${TOP}/dash-source\" COMMAND \"${GIT}\" reset --hard master~2 ) +execute_process( + WORKING_DIRECTORY \"${TOP}/dash-source\" + COMMAND \"${GIT}\" submodule init + ) +execute_process( + WORKING_DIRECTORY \"${TOP}/dash-source\" + COMMAND \"${GIT}\" submodule update + ) ") # Run the dashboard script with CTest. |