HADOOP-7598. Fix smart-apply-patch.sh to handle patching from a sub directory correctly. Contributed by Robert Evans.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1166913 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Arun Murthy 2011-09-08 21:31:46 +00:00
parent b3c9c3c182
commit 96a5bef79e
2 changed files with 56 additions and 25 deletions

View File

@ -39,40 +39,68 @@ fi
# Come up with a list of changed files into $TMP
TMP=/tmp/tmp.paths.$$
TOCLEAN="$TOCLEAN $TMP"
grep '^+++\|^---' $PATCH_FILE | cut -c '5-' | grep -v /dev/null | sort | uniq > $TMP
# Assume p0 to start
PLEVEL=0
if $PATCH -p0 -E --dry-run < $PATCH_FILE 2>&1 > $TMP; then
PLEVEL=0
#if the patch applied at P0 there is the possability that all we are doing
# is adding new files and they would apply anywhere. So try to guess the
# correct place to put those files.
# if all of the lines start with a/ or b/, then this is a git patch that
# was generated without --no-prefix
if ! grep -qv '^a/\|^b/' $TMP ; then
echo Looks like this is a git patch. Stripping a/ and b/ prefixes
echo and incrementing PLEVEL
PLEVEL=$[$PLEVEL + 1]
sed -i -e 's,^[ab]/,,' $TMP
fi
TMP2=/tmp/tmp.paths.2.$$
TOCLEAN="$TOCLEAN $TMP2"
PREFIX_DIRS=$(cut -d '/' -f 1 $TMP | sort | uniq)
grep '^patching file ' $TMP | awk '{print $3}' | grep -v /dev/null | sort | uniq > $TMP2
# if we are at the project root then nothing more to do
if [[ -d hadoop-common-project ]]; then
echo Looks like this is being run at project root
#first off check that all of the files do not exist
FOUND_ANY=0
for CHECK_FILE in $(cat $TMP2)
do
if [[ -f $CHECK_FILE ]]; then
FOUND_ANY=1
fi
done
# if all of the lines start with hadoop-common/, hadoop-hdfs/, or hadoop-mapreduce/, this is
# relative to the hadoop root instead of the subproject root, so we need
# to chop off another layer
elif [[ "$PREFIX_DIRS" =~ ^(hadoop-common-project|hadoop-hdfs-project|hadoop-mapreduce-project)$ ]]; then
if [[ "$FOUND_ANY" = "0" ]]; then
#all of the files are new files so we have to guess where the correct place to put it is.
echo Looks like this is relative to project root. Increasing PLEVEL
PLEVEL=$[$PLEVEL + 1]
# if all of the lines start with a/ or b/, then this is a git patch that
# was generated without --no-prefix
if ! grep -qv '^a/\|^b/' $TMP2 ; then
echo Looks like this is a git patch. Stripping a/ and b/ prefixes
echo and incrementing PLEVEL
PLEVEL=$[$PLEVEL + 1]
sed -i -e 's,^[ab]/,,' $TMP2
fi
elif ! echo "$PREFIX_DIRS" | grep -vxq 'hadoop-common-project\|hadoop-hdfs-project\|hadoop-mapreduce-project' ; then
echo Looks like this is a cross-subproject patch. Try applying from the project root
exit 1
PREFIX_DIRS_AND_FILES=$(cut -d '/' -f 1 | sort | uniq)
# if we are at the project root then nothing more to do
if [[ -d hadoop-common-project ]]; then
echo Looks like this is being run at project root
# if all of the lines start with hadoop-common/, hadoop-hdfs/, or hadoop-mapreduce/, this is
# relative to the hadoop root instead of the subproject root, so we need
# to chop off another layer
elif [[ "$PREFIX_DIRS_AND_FILES" =~ ^(hadoop-common-project|hadoop-hdfs-project|hadoop-mapreduce-project)$ ]]; then
echo Looks like this is relative to project root. Increasing PLEVEL
PLEVEL=$[$PLEVEL + 1]
elif ! echo "$PREFIX_DIRS_AND_FILES" | grep -vxq 'hadoop-common-project\|hadoop-hdfs-project\|hadoop-mapreduce-project' ; then
echo Looks like this is a cross-subproject patch. Try applying from the project root
cleanup 1
fi
fi
elif $PATCH -p1 -E --dry-run < $PATCH_FILE 2>&1 > /dev/null; then
PLEVEL=1
elif $PATCH -p2 -E --dry-run < $PATCH_FILE 2>&1 > /dev/null; then
PLEVEL=2
else
echo "The patch does not appear to apply with p0 to p2";
cleanup 1;
fi
echo Going to apply patch with: $PATCH -p$PLEVEL
$PATCH -p$PLEVEL -E < $PATCH_FILE
cleanup 0
cleanup $?

View File

@ -566,6 +566,9 @@ Release 0.23.0 - Unreleased
HADOOP-7593. Fix AssertionError in TestHttpServer.testMaxThreads().
(Uma Maheswara Rao G via szetszwo)
HADOOP-7598. Fix smart-apply-patch.sh to handle patching from a sub
directory correctly. (Robert Evans via acmurthy)
Release 0.22.0 - Unreleased
INCOMPATIBLE CHANGES