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