[Cmake-commits] CMake branch, master, updated. 67277bacca15047405a1185d2271ba81b553bdae

cmake-commits at cmake.org cmake-commits at cmake.org
Tue May 4 10:10:17 EDT 2010


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, master has been updated
       via  67277bacca15047405a1185d2271ba81b553bdae (commit)
      from  f20fd583d8fcc9527de997db3808a75ed9624b90 (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=67277bacca15047405a1185d2271ba81b553bdae
commit 67277bacca15047405a1185d2271ba81b553bdae
Author: Brad King <brad.king at kitware.com>
Date:   Tue May 4 09:35:27 2010 -0400

    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.

diff --git a/Source/CTest/cmCTestGIT.cxx b/Source/CTest/cmCTestGIT.cxx
index 6d5bf65..8bac518 100644
--- a/Source/CTest/cmCTestGIT.cxx
+++ b/Source/CTest/cmCTestGIT.cxx
@@ -87,9 +87,11 @@ void cmCTestGIT::NoteNewRevision()
 //----------------------------------------------------------------------------
 bool cmCTestGIT::UpdateImpl()
 {
+  const char* git = this->CommandLineTool.c_str();
+
   // Use "git pull" to update the working tree.
   std::vector<char const*> git_pull;
-  git_pull.push_back(this->CommandLineTool.c_str());
+  git_pull.push_back(git);
   git_pull.push_back("pull");
 
   // TODO: if(this->CTest->GetTestModel() == cmCTest::NIGHTLY)
@@ -112,7 +114,14 @@ bool cmCTestGIT::UpdateImpl()
 
   OutputLogger out(this->Log, "pull-out> ");
   OutputLogger err(this->Log, "pull-err> ");
-  return this->RunUpdateCommand(&git_pull[0], &out, &err);
+  if(this->RunUpdateCommand(&git_pull[0], &out, &err))
+    {
+    char const* git_submodule[] = {git, "submodule", "update", 0};
+    OutputLogger out2(this->Log, "submodule-out> ");
+    OutputLogger err2(this->Log, "submodule-err> ");
+    return this->RunChild(git_submodule, &out, &err);
+    }
+  return false;
 }
 
 //----------------------------------------------------------------------------
diff --git a/Tests/CTestUpdateCommon.cmake b/Tests/CTestUpdateCommon.cmake
index 94c37fe..266f4b3 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 c721bb4..f0a5770 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.

-----------------------------------------------------------------------

Summary of changes:
 Source/CTest/cmCTestGIT.cxx   |   13 ++++++-
 Tests/CTestUpdateCommon.cmake |    4 +-
 Tests/CTestUpdateGIT.cmake.in |   69 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 82 insertions(+), 4 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list