diff --git a/.gitignore b/.gitignore index a49ad4b48c..779f507d14 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ hadoop-tools/hadoop-openstack/src/test/resources/contract-test-options.xml hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/tla/yarnregistry.toolbox yarnregistry.pdf hadoop-tools/hadoop-aws/src/test/resources/contract-test-options.xml +patchprocess/ diff --git a/dev-support/test-patch.sh b/dev-support/test-patch.sh index 9f48c64444..3759e9fc3c 100755 --- a/dev-support/test-patch.sh +++ b/dev-support/test-patch.sh @@ -535,6 +535,26 @@ function echo_and_redirect "${@}" > "${logfile}" 2>&1 } +## @description is PATCH_DIR relative to BASEDIR? +## @audience public +## @stability stable +## @replaceable yes +## @returns 1 - no, PATCH_DIR +## @returns 0 - yes, PATCH_DIR - BASEDIR +function relative_patchdir +{ + local p=${PATCH_DIR#${BASEDIR}} + + if [[ ${#p} -eq ${#PATCH_DIR} ]]; then + echo ${p} + return 1 + fi + p=${p#/} + echo ${p} + return 0 +} + + ## @description Print the usage information ## @audience public ## @stability stable @@ -697,7 +717,8 @@ function parse_args esac done - # if we get a relative path, turn it absolute + # we need absolute dir for ${BASEDIR} + cd "${CWD}" BASEDIR=$(cd -P -- "${BASEDIR}" >/dev/null && pwd -P) if [[ ${BUILD_NATIVE} == "true" ]] ; then @@ -723,6 +744,7 @@ function parse_args JENKINS=false fi + cd "${CWD}" if [[ ! -d ${PATCH_DIR} ]]; then mkdir -p "${PATCH_DIR}" if [[ $? == 0 ]] ; then @@ -733,6 +755,9 @@ function parse_args fi fi + # we need absolute dir for PATCH_DIR + PATCH_DIR=$(cd -P -- "${PATCH_DIR}" >/dev/null && pwd -P) + GITDIFFLINES=${PATCH_DIR}/gitdifflines.txt } @@ -821,17 +846,36 @@ function find_changed_modules function git_checkout { local currentbranch + local exemptdir big_console_header "Confirming git environment" + cd "${BASEDIR}" + if [[ ! -d .git ]]; then + hadoop_error "ERROR: ${BASEDIR} is not a git repo." + cleanup_and_exit 1 + fi + if [[ ${RESETREPO} == "true" ]] ; then - cd "${BASEDIR}" ${GIT} reset --hard if [[ $? != 0 ]]; then hadoop_error "ERROR: git reset is failing" cleanup_and_exit 1 fi - ${GIT} clean -xdf + + # if PATCH_DIR is in BASEDIR, then we don't want + # git wiping it out. + exemptdir=$(relative_patchdir) + if [[ $? == 1 ]]; then + ${GIT} clean -xdf + else + # we do, however, want it emptied of all _files_. + # we need to leave _directories_ in case we are in + # re-exec mode (which places a directory full of stuff in it) + hadoop_debug "Exempting ${exemptdir} from clean" + rm "${PATCH_DIR}/*" 2>/dev/null + ${GIT} clean -xdf -e "${exemptdir}" + fi if [[ $? != 0 ]]; then hadoop_error "ERROR: git clean is failing" cleanup_and_exit 1 @@ -875,11 +919,6 @@ function git_checkout fi else - cd "${BASEDIR}" - if [[ ! -d .git ]]; then - hadoop_error "ERROR: ${BASEDIR} is not a git repo." - cleanup_and_exit 1 - fi status=$(${GIT} status --porcelain) if [[ "${status}" != "" && -z ${DIRTY_WORKSPACE} ]] ; then @@ -1000,6 +1039,16 @@ function verify_valid_branch local check=$2 local i + # shortcut some common + # non-resolvable names + if [[ -z ${check} ]]; then + return 1 + fi + + if [[ ${check} == patch ]]; then + return 1 + fi + if [[ ${check} =~ ^git ]]; then ref=$(echo "${check}" | cut -f2 -dt) count=$(echo "${ref}" | wc -c | tr -d ' ') @@ -2207,9 +2256,16 @@ function cleanup_and_exit if [[ ${JENKINS} == "true" ]] ; then if [[ -e "${PATCH_DIR}" ]] ; then - hadoop_debug "mv ${PATCH_DIR} ${BASEDIR} " if [[ -d "${PATCH_DIR}" ]]; then - mv "${PATCH_DIR}" "${BASEDIR}" + # if PATCH_DIR is already inside BASEDIR, then + # there is no need to move it since we assume that + # Jenkins or whatever already knows where it is at + # since it told us to put it there! + relative_patchdir >/dev/null + if [[ $? == 0 ]]; then + hadoop_debug "mv ${PATCH_DIR} ${BASEDIR}" + mv "${PATCH_DIR}" "${BASEDIR}" + fi fi fi fi @@ -2442,6 +2498,8 @@ find_changed_files determine_needed_tests +# from here on out, we'll be in ${BASEDIR} for cwd +# routines need to pushd/popd if they change. git_checkout RESULT=$? if [[ ${JENKINS} == "true" ]] ; then diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 5b2654a92e..1b33b3728f 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -533,6 +533,9 @@ Release 2.8.0 - UNRELEASED HADOOP-11911. test-patch should allow configuration of default branch (Sean Busbey via aw) + HADOOP-11917. test-patch.sh should work with ${BASEDIR}/patchprocess + setups (aw) + OPTIMIZATIONS HADOOP-11785. Reduce the number of listStatus operation in distcp diff --git a/pom.xml b/pom.xml index 1ea52eb681..8394324f07 100644 --- a/pom.xml +++ b/pom.xml @@ -178,7 +178,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs - org.eclipse.m2e @@ -361,6 +361,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs .git/** .idea/** **/build/** + **/patchprocess/** @@ -391,7 +392,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs - + true @@ -441,15 +442,15 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs true - + false - + org.apache.hadoop:hadoop-annotations - + aggregate @@ -472,7 +473,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs - + src @@ -587,12 +588,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs ${user.home}/.clover.license ${project.build.directory}/clover/hadoop-coverage.db - true