From 59692db6273a874f3df5f1421f50a3f33f0a86a4 Mon Sep 17 00:00:00 2001 From: "Roscoe A. Bartlett" Date: Thu, 14 Feb 2019 13:42:11 -0700 Subject: [PATCH] WIP: Working to update ctest -S git commands (#278) --- .../MockCTestDriver/CMakeLists.txt | 22 ++++-- .../ctest_driver/TribitsCTestDriverCore.cmake | 38 +++++++---- .../TribitsCTestDriverCoreHelpers.cmake | 67 ++----------------- 3 files changed, 46 insertions(+), 81 deletions(-) diff --git a/test/ctest_driver/MockCTestDriver/CMakeLists.txt b/test/ctest_driver/MockCTestDriver/CMakeLists.txt index 980c9e645..75923095a 100644 --- a/test/ctest_driver/MockCTestDriver/CMakeLists.txt +++ b/test/ctest_driver/MockCTestDriver/CMakeLists.txt @@ -402,9 +402,14 @@ CREATE_CTEST_DEPENDENCY_HANDLING_TEST_CASE( # Check repo operations for an update CREATE_CTEST_DEPENDENCY_HANDLING_TEST_CASE( CI_TestGitUpdateCommands - ARGS Trilinos_ENABLE_SECONDARY_TESTED_CODE=ON Trilinos_ENABLE_KNOWN_EXTERNAL_REPOS_TYPE=Continuous + ARGS + Trilinos_REPOSITORY_LOCATION=https://some-git-url/Trilinos.git + CTEST_UPDATE_ARGS="--reference /Trilinos" + Trilinos_ENABLE_KNOWN_EXTERNAL_REPOS_TYPE=Continuous + Trilinos_ENABLE_SECONDARY_TESTED_CODE=ON Trilinos_ADDITIONAL_PACKAGES=Stalix PASS_REGULAR_EXPRESSION_ALL + "CTEST_CHECKOUT_COMMAND=./somebasedir/git. clone -o origin --reference /Trilinos https://some-git-url/Trilinos[.]git" "preCopyrightTrilinos: Doing GIT update from URL 'url1:/git/preCopyrightTrilinos' to dir '.*/MockTrilinos/preCopyrightTrilinos'" "EXECUTE_PROCESS.COMMAND./somebasedir/git[;]clean[;]-fdx[;]WORKING_DIRECTORY[;].*/MockTrilinos/preCopyrightTrilinos.OUTPUT_FILE[;].*/test/ctest_driver/MockCTestDriver/TriBITS_MockCTestDriver_CI_TestGitUpdateCommands/preCopyrightTrilinos.clean.out." "EXECUTE_PROCESS.COMMAND./somebasedir/git[;]reset[;]--hard[;]HEAD[;]WORKING_DIRECTORY[;].*/MockTrilinos/preCopyrightTrilinos.OUTPUT_FILE[;].*/test/ctest_driver/MockCTestDriver/TriBITS_MockCTestDriver_CI_TestGitUpdateCommands/preCopyrightTrilinos.reset.out." @@ -432,12 +437,16 @@ CREATE_CTEST_DEPENDENCY_HANDLING_TEST_CASE( # Test repo operations for Trilinos_BRANCH=other-branch (#130) CREATE_CTEST_DEPENDENCY_HANDLING_TEST_CASE( CI_TestGitUpdateCommands_Branch - ARGS Trilinos_ENABLE_SECONDARY_TESTED_CODE=ON Trilinos_ENABLE_KNOWN_EXTERNAL_REPOS_TYPE=Continuous - Trilinos_ADDITIONAL_PACKAGES=Stalix + ARGS + Trilinos_REPOSITORY_LOCATION=https://some-git-url/Trilinos.git + CTEST_UPDATE_ARGS="--reference /Trilinos" Trilinos_BRANCH=other-branch + Trilinos_ENABLE_KNOWN_EXTERNAL_REPOS_TYPE=Continuous + Trilinos_ENABLE_SECONDARY_TESTED_CODE=ON + Trilinos_ADDITIONAL_PACKAGES=Stalix PASS_REGULAR_EXPRESSION_ALL - "For base repo, doing switch to branch other-branch" - "EXECUTE_PROCESS.COMMAND[;]/somebasedir/git[;]checkout[;]-B[;]other-branch[;]--track[;]origin/other-branch[;]WORKING_DIRECTORY[;].*/MockTrilinos[;]RESULT_VARIABLE[;]GIT_CHECKOUT_RETURN_VAL[;]OUTPUT_VARIABLE[;]BRANCH_OUTPUT[;]ERROR_VARIABLE[;]BRANCH_ERROR" + "CTEST_CHECKOUT_COMMAND=./somebasedir/git. clone -b other-branch -o origin --reference /Trilinos https://some-git-url/Trilinos[.]git" + "For extra repos, doing switch to branch other-branch" "preCopyrightTrilinos: Doing GIT update from URL 'url1:/git/preCopyrightTrilinos' to dir '.*/MockTrilinos/preCopyrightTrilinos'" "EXECUTE_PROCESS.COMMAND./somebasedir/git[;]clean[;]-fdx[;]WORKING_DIRECTORY[;].*/MockTrilinos/preCopyrightTrilinos.OUTPUT_FILE[;].*/test/ctest_driver/MockCTestDriver/TriBITS_MockCTestDriver_CI_TestGitUpdateCommands_Branch/preCopyrightTrilinos.clean.out." @@ -468,8 +477,7 @@ CREATE_CTEST_DEPENDENCY_HANDLING_TEST_CASE( Trilinos_ADDITIONAL_PACKAGES=Stalix Trilinos_BRANCH=other-branch Trilinos_EXTRAREPOS_BRANCH=yet-other-branch PASS_REGULAR_EXPRESSION_ALL - "For base repo, doing switch to branch other-branch" - "EXECUTE_PROCESS.COMMAND[;]/somebasedir/git[;]checkout[;]-B[;]other-branch[;]--track[;]origin/other-branch[;]WORKING_DIRECTORY[;].*/MockTrilinos[;]RESULT_VARIABLE[;]GIT_CHECKOUT_RETURN_VAL[;]OUTPUT_VARIABLE[;]BRANCH_OUTPUT[;]ERROR_VARIABLE[;]BRANCH_ERROR" + "For extra repos, doing switch to branch yet-other-branch" "preCopyrightTrilinos: Doing GIT update from URL 'url1:/git/preCopyrightTrilinos' to dir '.*/MockTrilinos/preCopyrightTrilinos'" "EXECUTE_PROCESS.COMMAND./somebasedir/git[;]clean[;]-fdx[;]WORKING_DIRECTORY[;].*/MockTrilinos/preCopyrightTrilinos.OUTPUT_FILE[;].*/test/ctest_driver/MockCTestDriver/TriBITS_MockCTestDriver_CI_TestGitUpdateCommands_Branch_ExtraReposBranch/preCopyrightTrilinos.clean.out." diff --git a/tribits/ctest_driver/TribitsCTestDriverCore.cmake b/tribits/ctest_driver/TribitsCTestDriverCore.cmake index 2c3c4b714..d0096276e 100644 --- a/tribits/ctest_driver/TribitsCTestDriverCore.cmake +++ b/tribits/ctest_driver/TribitsCTestDriverCore.cmake @@ -1559,6 +1559,16 @@ FUNCTION(TRIBITS_CTEST_DRIVER) STRING(REPLACE "," ";" ${PROJECT_NAME}_EXCLUDE_PACKAGES "${${PROJECT_NAME}_EXCLUDE_PACKAGES}" ) + IF(CTEST_TEST_TYPE STREQUAL "Nightly") + SET_DEFAULT_AND_FROM_ENV(${PROJECT_NAME}_REPOSITORY_LOCATION + "${${PROJECT_NAME}_REPOSITORY_LOCATION_NIGHTLY_DEFAULT}") + ELSE() + SET_DEFAULT_AND_FROM_ENV(${PROJECT_NAME}_REPOSITORY_LOCATION + "${${PROJECT_NAME}_REPOSITORY_LOCATION_DEFAULT}") + ENDIF() + + SET_DEFAULT_AND_FROM_ENV( ${PROJECT_NAME}_GIT_REPOSITORY_REMOTE "origin" ) + IF(${PROJECT_NAME}_REPOSITORY_BRANCH) SET(${PROJECT_NAME}_BRANCH_DEFAULT ${${PROJECT_NAME}_REPOSITORY_BRANCH}) ELSE() @@ -1570,14 +1580,6 @@ FUNCTION(TRIBITS_CTEST_DRIVER) SET_DEFAULT_AND_FROM_ENV( ${PROJECT_NAME}_ENABLE_DEVELOPMENT_MODE "${${PROJECT_NAME}_ENABLE_DEVELOPMENT_MODE_DEFAULT}" ) - IF(CTEST_TEST_TYPE STREQUAL "Nightly") - SET_DEFAULT_AND_FROM_ENV(${PROJECT_NAME}_REPOSITORY_LOCATION - "${${PROJECT_NAME}_REPOSITORY_LOCATION_NIGHTLY_DEFAULT}") - ELSE() - SET_DEFAULT_AND_FROM_ENV(${PROJECT_NAME}_REPOSITORY_LOCATION - "${${PROJECT_NAME}_REPOSITORY_LOCATION_DEFAULT}") - ENDIF() - # Select the ${PROJECT_NAME} packages to enable (empty means to select all # available). This will override any disabled packages but not those # disabled by ${PROJECT_NAME}_EXCLUDE_PACKAGES. @@ -1752,19 +1754,29 @@ FUNCTION(TRIBITS_CTEST_DRIVER) SET(UPDATE_TYPE "git") MESSAGE("UPDATE_TYPE = '${UPDATE_TYPE}'") - SET(CTEST_UPDATE_COMMAND "${GIT_EXE}") - MESSAGE("CTEST_UPDATE_COMMAND='${CTEST_UPDATE_COMMAND}'") + IF (${PROJECT_NAME}_BRANCH) + SET(CHECKOUT_BRANCH_ARG "-b ${${PROJECT_NAME}_BRANCH} ") + ELSE() + SET(CHECKOUT_BRANCH_ARG) + ENDIF() + + SET( _CTEST_CHECKOUT_COMMAND + "\"${GIT_EXE}\" clone ${CHECKOUT_BRANCH_ARG}-o ${${PROJECT_NAME}_GIT_REPOSITORY_REMOTE} ${CTEST_UPDATE_ARGS} ${${PROJECT_NAME}_REPOSITORY_LOCATION}" ) + MESSAGE("CTEST_CHECKOUT_COMMAND=${_CTEST_CHECKOUT_COMMAND}") IF(NOT EXISTS "${CTEST_SOURCE_DIRECTORY}") MESSAGE("${CTEST_SOURCE_DIRECTORY} does not exist so setting up for an initial checkout") - SET( CTEST_CHECKOUT_COMMAND - "\"${GIT_EXE}\" clone ${CTEST_UPDATE_ARGS} ${${PROJECT_NAME}_REPOSITORY_LOCATION}" ) - MESSAGE("CTEST_CHECKOUT_COMMAND='${CTEST_CHECKOUT_COMMAND}'") + SET( CTEST_CHECKOUT_COMMAND "${_CTEST_CHECKOUT_COMMAND}") + # NOTE: Just to be safe, only set CTEST_CHECKOUT_COMMAND to do a clone + # if the repo does not already exist! ELSE() MESSAGE("${CTEST_SOURCE_DIRECTORY} exists so skipping the initial checkout.") SET(CREATE_VC_UPDATE_FILE TRUE) ENDIF() + SET(CTEST_UPDATE_COMMAND "${GIT_EXE}") + MESSAGE("CTEST_UPDATE_COMMAND='${CTEST_UPDATE_COMMAND}'") + ENDIF() # diff --git a/tribits/ctest_driver/TribitsCTestDriverCoreHelpers.cmake b/tribits/ctest_driver/TribitsCTestDriverCoreHelpers.cmake index d0e64762a..d6e6f4dbd 100644 --- a/tribits/ctest_driver/TribitsCTestDriverCoreHelpers.cmake +++ b/tribits/ctest_driver/TribitsCTestDriverCoreHelpers.cmake @@ -103,14 +103,14 @@ FUNCTION(TRIBITS_UPDATE_GIT_EXTRAREPO GIT_EXE EXTRAREPO_SRC_DIR) WORKING_DIRECTORY "${EXTRAREPO_SRC_DIR}" OUTPUT_FILE "${EXTRAREPO_RESET_OUT_FILE}" ) SET(FETCH_CMND_ARGS - COMMAND "${GIT_EXE}" fetch origin + COMMAND "${GIT_EXE}" fetch ${${PROJECT_NAME}_GIT_REPOSITORY_REMOTE} TIMEOUT 600 # seconds WORKING_DIRECTORY "${EXTRAREPO_SRC_DIR}" OUTPUT_FILE "${EXTRAREPO_FETCH_OUT_FILE}" ) IF (${PROJECT_NAME}_EXTRAREPOS_BRANCH) SET(SET_BRANCH_CMND_ARGS COMMAND "${GIT_EXE}" checkout -B ${${PROJECT_NAME}_EXTRAREPOS_BRANCH} - --track origin/${${PROJECT_NAME}_EXTRAREPOS_BRANCH} + --track ${${PROJECT_NAME}_GIT_REPOSITORY_REMOTE}/${${PROJECT_NAME}_EXTRAREPOS_BRANCH} WORKING_DIRECTORY "${EXTRAREPO_SRC_DIR}" OUTPUT_FILE "${EXTRAREPO_SET_BRANCH_OUT_FILE}" ) ELSE () @@ -183,59 +183,6 @@ FUNCTION(TRIBITS_CLONE_OR_UPDATE_EXTRAREPO EXTRAREPO_NAME_IN EXTRAREPO_DIR_IN ENDFUNCTION() -# -# Update the branch of the base git repo -# -FUNCTION(TRIBITS_SET_BASE_REPO_BRANCH CTEST_UPDATE_RETURN_VAL - UPDATE_FAILED_VAR_OUT - ) - - SET(GIT_CHECKOUT_RETURN_VAL "0") - - IF (${PROJECT_NAME}_BRANCH AND NOT "${CTEST_UPDATE_RETURN_VAL}" LESS "0") - - MESSAGE("For base repo, doing switch to branch ${${PROJECT_NAME}_BRANCH}") - - SET(EXECUTE_PROCESS_COMMANDS_ARGS - COMMAND ${GIT_EXE} checkout - -B ${${PROJECT_NAME}_BRANCH} --track origin/${${PROJECT_NAME}_BRANCH} - WORKING_DIRECTORY ${CTEST_SOURCE_DIRECTORY} - RESULT_VARIABLE GIT_CHECKOUT_RETURN_VAL - OUTPUT_VARIABLE BRANCH_OUTPUT - ERROR_VARIABLE BRANCH_ERROR - ) - # NOTE: Above will work smoothly even if the local branch already - # exists and/or is already on that branch. This command does not move - # ORIG_HEAD so it will not mess up the pull and update that CTest did - # for the base repo. - - IF (NOT CTEST_DEPENDENCY_HANDLING_UNIT_TESTING) - EXECUTE_PROCESS(${EXECUTE_PROCESS_COMMANDS_ARGS}) - ELSE() - MESSAGE("EXECUTE_PROCESS(${EXECUTE_PROCESS_COMMANDS_ARGS})") - SET(GIT_CHECKOUT_RETURN_VAL 0) - ENDIF() - - IF(NOT "${GIT_CHECKOUT_RETURN_VAL}" EQUAL "0") - MESSAGE("Switch to branch ${${PROJECT_NAME}_BRANCH} failed with" - " error code ${GIT_CHECKOUT_RETURN_VAL}") - QUEUE_ERROR("Switch to branch ${${PROJECT_NAME}_BRANCH} failed with" - " error code ${GIT_CHECKOUT_RETURN_VAL}") - ENDIF() - #Apparently the successful branch switch is also written to stderr. - MESSAGE("${BRANCH_ERROR}") - - ENDIF() - - IF ("${CTEST_UPDATE_RETURN_VAL}" LESS "0" OR NOT "${GIT_CHECKOUT_RETURN_VAL}" EQUAL "0") - SET(${UPDATE_FAILED_VAR_OUT} TRUE PARENT_SCOPE) - ELSE() - SET(${UPDATE_FAILED_VAR_OUT} FALSE PARENT_SCOPE) - ENDIF() - -ENDFUNCTION() - - # # Clone or update all of the repos and put them on right branch # @@ -249,12 +196,10 @@ FUNCTION(TRIBITS_CLONE_OR_UPDATE_ALL_REPOS CTEST_UPDATE_RETURN_VAL SET(UPDATE_FAILED FALSE) - # A) Put the base repo on the right branch - - TRIBITS_SET_BASE_REPO_BRANCH(${CTEST_UPDATE_RETURN_VAL} BASE_REPO_UPDATE_FAILED) - IF (BASE_REPO_UPDATE_FAILED) - SET(UPDATE_FAILED TRUE) - ENDIF() + # A) NOTE: The base repo is already on the right branch either due to the + # initial clone run in ctest_start() that set the branch with 'git clone -b + # ...' or it was set in the ctest_update() where it checked out the + # correct banch. # B) Clone and update the extra repos