| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 | 
							- # This script drives creation of a git repository and checks
 
- # that CTest can update from it.
 
- #-----------------------------------------------------------------------------
 
- # 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")
 
- #-----------------------------------------------------------------------------
 
- # Report git tools in use.
 
- message("Using GIT tools:")
 
- set(GIT "@GIT_EXECUTABLE@")
 
- message(" git = ${GIT}")
 
- set(AUTHOR_CONFIG "[user]
 
- \tname = Test Author
 
- \temail = [email protected]
 
- ")
 
- #-----------------------------------------------------------------------------
 
- # Initialize the testing directory.
 
- message("Creating test directory...")
 
- init_testing()
 
- if(UNIX)
 
-   set(src "@CMAKE_CURRENT_SOURCE_DIR@")
 
-   configure_file(${src}/CTestUpdateGIT.sh.in ${TOP}/git.sh @ONLY)
 
-   set(GIT ${TOP}/git.sh)
 
- endif()
 
- #-----------------------------------------------------------------------------
 
- # Create the repository.
 
- message("Creating repository...")
 
- file(MAKE_DIRECTORY ${TOP}/repo.git)
 
- run_child(
 
-   WORKING_DIRECTORY ${TOP}/repo.git
 
-   COMMAND ${GIT} --bare init
 
-   )
 
- file(REMOVE_RECURSE ${TOP}/repo.git/hooks)
 
- # 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)
 
- run_child(WORKING_DIRECTORY ${TOP}
 
-   COMMAND ${GIT} clone module.git module
 
-   )
 
- file(REMOVE_RECURSE ${TOP}/module/.git/hooks)
 
- file(APPEND ${TOP}/module/.git/config "
 
- ${AUTHOR_CONFIG}")
 
- create_content(module)
 
- 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...")
 
- # Import the content into the repository.
 
- run_child(WORKING_DIRECTORY ${TOP}
 
-   COMMAND ${GIT} clone repo.git import
 
-   )
 
- file(REMOVE_RECURSE ${TOP}/import/.git/hooks)
 
- file(APPEND ${TOP}/import/.git/config "
 
- ${AUTHOR_CONFIG}")
 
- create_content(import)
 
- file(WRITE ${TOP}/import/HEAD "HEAD\n")
 
- file(WRITE ${TOP}/import/master "master\n")
 
- run_child(WORKING_DIRECTORY ${TOP}/import
 
-   COMMAND ${GIT} add .
 
-   )
 
- run_child(WORKING_DIRECTORY ${TOP}/import
 
-   COMMAND ${GIT} config core.safecrlf false
 
-   )
 
- run_child(WORKING_DIRECTORY ${TOP}/import
 
-   COMMAND ${GIT} submodule add ../module.git module
 
-   )
 
- run_child(WORKING_DIRECTORY ${TOP}/import
 
-   COMMAND ${GIT} commit -m "Initial content"
 
-   )
 
- run_child(WORKING_DIRECTORY ${TOP}/import
 
-   COMMAND ${GIT} push origin master:refs/heads/master
 
-   )
 
- #-----------------------------------------------------------------------------
 
- # 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(
 
-   WORKING_DIRECTORY ${TOP}
 
-   COMMAND ${GIT} clone repo.git user-source
 
-   )
 
- 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
 
-   )
 
- # Save the first revision name.
 
- execute_process(
 
-   WORKING_DIRECTORY ${TOP}/user-source
 
-   COMMAND ${GIT} rev-parse HEAD
 
-   OUTPUT_VARIABLE revision1
 
-   OUTPUT_STRIP_TRAILING_WHITESPACE
 
-   )
 
- #-----------------------------------------------------------------------------
 
- # Create an empty commit.
 
- message("Creating empty commit...")
 
- run_child(
 
-   WORKING_DIRECTORY ${TOP}/user-source
 
-   COMMAND ${GIT} commit --allow-empty -m "Empty commit"
 
-   )
 
- #-----------------------------------------------------------------------------
 
- # Make changes in the working tree.
 
- message("Changing content...")
 
- update_content(user-source files_added files_removed dirs_added)
 
- if(dirs_added)
 
-   run_child(
 
-     WORKING_DIRECTORY ${TOP}/user-source
 
-     COMMAND ${GIT} add -- ${dirs_added}
 
-     )
 
- endif()
 
- run_child(
 
-   WORKING_DIRECTORY ${TOP}/user-source
 
-   COMMAND ${GIT} add -- ${files_added}
 
-   )
 
- 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
 
-   )
 
- #-----------------------------------------------------------------------------
 
- # Commit the changes to the repository.
 
- message("Committing revision 2...")
 
- run_child(
 
-   WORKING_DIRECTORY ${TOP}/user-source
 
-   COMMAND ${GIT} commit -m "Changed content"
 
-   )
 
- run_child(
 
-   WORKING_DIRECTORY ${TOP}/user-source
 
-   COMMAND ${GIT} push origin
 
-   )
 
- #-----------------------------------------------------------------------------
 
- # Make changes in the working tree.
 
- message("Changing content again...")
 
- change_content(user-source)
 
- run_child(
 
-   WORKING_DIRECTORY ${TOP}/user-source
 
-   COMMAND ${GIT} add -u
 
-   )
 
- #-----------------------------------------------------------------------------
 
- # Commit the changes to the repository.
 
- message("Committing revision 3...")
 
- run_child(
 
-   WORKING_DIRECTORY ${TOP}/user-source
 
-   COMMAND ${GIT} commit -m "Changed content again"
 
-   )
 
- run_child(
 
-   WORKING_DIRECTORY ${TOP}/user-source
 
-   COMMAND ${GIT} push origin
 
-   )
 
- #-----------------------------------------------------------------------------
 
- # Go back to before the changes so we can test updating.
 
- macro(rewind_source src_dir)
 
-   message("Backing up to revision 1...")
 
-   run_child(
 
-     WORKING_DIRECTORY ${TOP}/${src_dir}
 
-     COMMAND ${GIT} reset --hard ${revision1}
 
-     )
 
-   run_child(
 
-     WORKING_DIRECTORY ${TOP}/${src_dir}
 
-     COMMAND ${GIT} submodule update
 
-     )
 
- endmacro()
 
- rewind_source(user-source)
 
- # Make sure pull does not try to rebase (which does not work with
 
- # modified files) even if ~/.gitconfig sets "branch.master.rebase".
 
- run_child(
 
-   WORKING_DIRECTORY ${TOP}/user-source
 
-   COMMAND ${GIT} config branch.master.rebase false
 
-   )
 
- # Create a modified file.
 
- modify_content(user-source)
 
- #-----------------------------------------------------------------------------
 
- # Test updating the user work directory with the command-line interface.
 
- message("Running CTest Dashboard Command Line...")
 
- # Create the user build tree.
 
- create_build_tree(user-source user-binary)
 
- file(APPEND ${TOP}/user-binary/CTestConfiguration.ini
 
-   "# GIT command configuration
 
- UpdateCommand: ${GIT}
 
- ")
 
- # Run the dashboard command line interface.
 
- set(UPDATE_NO_MODIFIED 1)
 
- run_dashboard_command_line(user-binary)
 
- set(UPDATE_NO_MODIFIED 0)
 
- rewind_source(user-source)
 
- modify_content(user-source)
 
- message("Running CTest Dashboard Command Line (custom update)...")
 
- # Create the user build tree.
 
- create_build_tree(user-source user-binary-custom)
 
- file(APPEND ${TOP}/user-binary-custom/CTestConfiguration.ini
 
-   "# GIT command configuration
 
- UpdateCommand: ${GIT}
 
- GITUpdateCustom: ${GIT};pull;origin;master
 
- ")
 
- # Run the dashboard command line interface.
 
- run_dashboard_command_line(user-binary-custom)
 
- #-----------------------------------------------------------------------------
 
- # Test initial checkout and update with a dashboard script.
 
- message("Running CTest Dashboard Script...")
 
- create_dashboard_script(dash-binary
 
-   "# git command configuration
 
- set(CTEST_GIT_COMMAND \"${GIT}\")
 
- set(CTEST_GIT_UPDATE_OPTIONS)
 
- execute_process(
 
-   WORKING_DIRECTORY \"${TOP}\"
 
-   COMMAND \"${GIT}\" clone repo.git dash-source
 
-   )
 
- # Test .git file.
 
- file(RENAME \"${TOP}/dash-source/.git\" \"${TOP}/dash-source/repo.git\")
 
- file(WRITE \"${TOP}/dash-source/.git\" \"gitdir: repo.git\n\")
 
- execute_process(
 
-   WORKING_DIRECTORY \"${TOP}/dash-source\"
 
-   COMMAND \"${GIT}\" reset --hard ${revision1}
 
-   )
 
- 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.
 
- run_dashboard_script(dash-binary)
 
- rewind_source(dash-source)
 
- #-----------------------------------------------------------------------------
 
- # Test custom update with a dashboard script.
 
- message("Running CTest Dashboard Script (custom update)...")
 
- create_dashboard_script(dash-binary-custom
 
-   "# git command configuration
 
- set(CTEST_GIT_COMMAND \"${GIT}\")
 
- set(CTEST_GIT_UPDATE_OPTIONS)
 
- set(CTEST_GIT_UPDATE_CUSTOM \${CTEST_GIT_COMMAND} pull origin master)
 
- ")
 
- # Run the dashboard script with CTest.
 
- run_dashboard_script(dash-binary-custom)
 
- rewind_source(dash-source)
 
- #-----------------------------------------------------------------------------
 
- # Test no update with a dashboard script.
 
- message("Running CTest Dashboard Script (No update)...")
 
- create_dashboard_script(dash-binary-no-update
 
-   "# git command configuration
 
- set(CTEST_GIT_COMMAND \"${GIT}\")
 
- set(CTEST_UPDATE_VERSION_ONLY TRUE)
 
- ")
 
- # Run the dashboard script with CTest.
 
- set(NO_UPDATE 1)
 
- run_dashboard_script(dash-binary-no-update)
 
- unset(NO_UPDATE)
 
- rewind_source(dash-source)
 
- #-----------------------------------------------------------------------------
 
- # Test ctest_update(QUIET)
 
- message("Running CTest Dashboard Script (update quietly)...")
 
- set(ctest_update_args QUIET)
 
- create_dashboard_script(dash-binary-quiet
 
-   "# git command configuration
 
- set(CTEST_GIT_COMMAND \"${GIT}\")
 
- set(CTEST_GIT_UPDATE_OPTIONS)
 
- set(CTEST_GIT_UPDATE_CUSTOM \${CTEST_GIT_COMMAND} pull origin master)
 
- ")
 
- unset(ctest_update_args)
 
- # Run the dashboard script with CTest.
 
- run_dashboard_script(dash-binary-quiet)
 
- # Make sure the output seems quiet.
 
- if("${OUTPUT}" MATCHES "Updating the repository")
 
-   message(FATAL_ERROR "Found 'Updating the repository' in quiet output")
 
- endif()
 
- #-----------------------------------------------------------------------------
 
- # Test ctest_update(RETURN_VALUE) on failure
 
- message("Running CTest Dashboard Script (fail to update)...")
 
- set(ctest_update_check [[
 
- if(NOT ret LESS 0)
 
-   message(FATAL_ERROR "ctest_update incorrectly succeeded with ${ret}")
 
- endif()
 
- ]])
 
- create_dashboard_script(dash-binary-fail
 
-   "set(CTEST_GIT_COMMAND \"update-command-does-not-exist\")
 
- ")
 
- unset(ctest_update_check)
 
- # Run the dashboard script with CTest.
 
- set(FAIL_UPDATE 1)
 
- run_dashboard_script(dash-binary-fail)
 
- unset(FAIL_UPDATE)
 
 
  |