Skip to content

Commit

Permalink
WIP: Working to update ctest -S git commands (TriBITSPub#278)
Browse files Browse the repository at this point in the history
  • Loading branch information
bartlettroscoe committed Feb 14, 2019
1 parent f5ca5b7 commit 59692db
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 81 deletions.
22 changes: 15 additions & 7 deletions test/ctest_driver/MockCTestDriver/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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 <some-base-dir>/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 <some-base-dir>/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."
Expand Down Expand Up @@ -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 <some-base-dir>/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 <some-base-dir>/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."
Expand Down Expand Up @@ -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."
Expand Down
38 changes: 25 additions & 13 deletions tribits/ctest_driver/TribitsCTestDriverCore.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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.
Expand Down Expand Up @@ -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()

#
Expand Down
67 changes: 6 additions & 61 deletions tribits/ctest_driver/TribitsCTestDriverCoreHelpers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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 ()
Expand Down Expand Up @@ -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
#
Expand All @@ -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
# <branch> ...' or it was set in the ctest_update() where it checked out the
# correct banch.

# B) Clone and update the extra repos

Expand Down

0 comments on commit 59692db

Please sign in to comment.