forked from jonsmirl/mpc5200
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PATCH] patch-kernel: support non-incremental 2.6.x.y 'stable' patches
Add better support for (non-incremental) 2.6.x.y patches; If an ending version number if not specified, the script automatically increments the SUBLEVEL (x in 2.6.x.y) until no more patch files are found; however, EXTRAVERSION (y in 2.6.x.y) is never automatically incremented but must be specified fully. patch-kernel does not normally support reverse patching, but does so when applying EXTRAVERSION (x.y) patches, so that moving from 2.6.11.y to 2.6.11.z is easy and handled by the script (reverse 2.6.11.y and apply 2.6.11.z). Signed-off-by: Randy Dunlap <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
- Loading branch information
Randy.Dunlap
authored and
Linus Torvalds
committed
May 5, 2005
1 parent
64f562c
commit 1922163
Showing
1 changed file
with
101 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -46,6 +46,19 @@ | |
# fix some whitespace damage; | ||
# be smarter about stopping when current version is larger than requested; | ||
# Randy Dunlap <[email protected]>, 2004-AUG-18. | ||
# | ||
# Add better support for (non-incremental) 2.6.x.y patches; | ||
# If an ending version number if not specified, the script automatically | ||
# increments the SUBLEVEL (x in 2.6.x.y) until no more patch files are found; | ||
# however, EXTRAVERSION (y in 2.6.x.y) is never automatically incremented | ||
# but must be specified fully. | ||
# | ||
# patch-kernel does not normally support reverse patching, but does so when | ||
# applying EXTRAVERSION (x.y) patches, so that moving from 2.6.11.y to 2.6.11.z | ||
# is easy and handled by the script (reverse 2.6.11.y and apply 2.6.11.z). | ||
# Randy Dunlap <[email protected]>, 2005-APR-08. | ||
|
||
PNAME=patch-kernel | ||
|
||
# Set directories from arguments, or use defaults. | ||
sourcedir=${1-/usr/src/linux} | ||
|
@@ -54,7 +67,7 @@ stopvers=${3-default} | |
|
||
if [ "$1" == -h -o "$1" == --help -o ! -r "$sourcedir/Makefile" ]; then | ||
cat << USAGE | ||
usage: patch-kernel [-h] [ sourcedir [ patchdir [ stopversion ] [ -acxx ] ] ] | ||
usage: $PNAME [-h] [ sourcedir [ patchdir [ stopversion ] [ -acxx ] ] ] | ||
source directory defaults to /usr/src/linux, | ||
patch directory defaults to the current directory, | ||
stopversion defaults to <all in patchdir>. | ||
|
@@ -72,6 +85,19 @@ do | |
esac; | ||
done | ||
|
||
# --------------------------------------------------------------------------- | ||
# arg1 is filename | ||
noFile () { | ||
echo "cannot find patch file: ${patch}" | ||
exit 1 | ||
} | ||
|
||
# --------------------------------------------------------------------------- | ||
backwards () { | ||
echo "$PNAME does not support reverse patching" | ||
exit 1 | ||
} | ||
|
||
# --------------------------------------------------------------------------- | ||
# Find a file, first parameter is basename of file | ||
# it tries many compression mechanisms and sets variables to say how to get it | ||
|
@@ -133,6 +159,28 @@ applyPatch () { | |
return 0; | ||
} | ||
|
||
# --------------------------------------------------------------------------- | ||
# arg1 is patch filename | ||
reversePatch () { | ||
echo -n "Reversing $1 (${name}) ... " | ||
if $uncomp ${patchdir}/"$1"${ext} | patch -p1 -Rs -N -E -d $sourcedir | ||
then | ||
echo "done." | ||
else | ||
echo "failed. Clean it up." | ||
exit 1 | ||
fi | ||
if [ "`find $sourcedir/ '(' -name '*.rej' -o -name '.*.rej' ')' -print`" ] | ||
then | ||
echo "Aborting. Reject files found." | ||
return 1 | ||
fi | ||
# Remove backup files | ||
find $sourcedir/ '(' -name '*.orig' -o -name '.*.orig' ')' -exec rm -f {} \; | ||
|
||
return 0 | ||
} | ||
|
||
# set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION | ||
TMPFILE=`mktemp .tmpver.XXXXXX` || { echo "cannot make temp file" ; exit 1; } | ||
grep -E "^(VERSION|PATCHLEVEL|SUBLEVEL|EXTRAVERSION)" $sourcedir/Makefile > $TMPFILE | ||
|
@@ -160,68 +208,91 @@ then | |
EXTRAVER=$EXTRAVERSION | ||
fi | ||
EXTRAVER=${EXTRAVER%%[[:punct:]]*} | ||
#echo "patch-kernel: changing EXTRAVERSION from $EXTRAVERSION to $EXTRAVER" | ||
#echo "$PNAME: changing EXTRAVERSION from $EXTRAVERSION to $EXTRAVER" | ||
fi | ||
|
||
#echo "stopvers=$stopvers" | ||
if [ $stopvers != "default" ]; then | ||
STOPSUBLEVEL=`echo $stopvers | cut -d. -f3` | ||
STOPEXTRA=`echo $stopvers | cut -d. -f4` | ||
#echo "STOPSUBLEVEL=$STOPSUBLEVEL, STOPEXTRA=$STOPEXTRA" | ||
#echo "#___STOPSUBLEVEL=/$STOPSUBLEVEL/, STOPEXTRA=/$STOPEXTRA/" | ||
else | ||
STOPSUBLEVEL=9999 | ||
STOPEXTRA=9999 | ||
fi | ||
|
||
while : # incrementing SUBLEVEL (s in v.p.s) | ||
do | ||
if [ x$EXTRAVER != "x" ]; then | ||
# This all assumes a 2.6.x[.y] kernel tree. | ||
# Don't allow backwards/reverse patching. | ||
if [ $STOPSUBLEVEL -lt $SUBLEVEL ]; then | ||
backwards | ||
fi | ||
|
||
if [ x$EXTRAVER != "x" ]; then | ||
CURRENTFULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL.$EXTRAVER" | ||
else | ||
else | ||
CURRENTFULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL" | ||
fi | ||
fi | ||
|
||
if [ x$EXTRAVER != "x" ]; then | ||
echo "backing up to: $VERSION.$PATCHLEVEL.$SUBLEVEL" | ||
patch="patch-${CURRENTFULLVERSION}" | ||
findFile $patchdir/${patch} || noFile ${patch} | ||
reversePatch ${patch} || exit 1 | ||
fi | ||
|
||
# now current is 2.6.x, with no EXTRA applied, | ||
# so update to target SUBLEVEL (2.6.SUBLEVEL) | ||
# and then to target EXTRAVER (2.6.SUB.EXTRAVER) if requested. | ||
# If not ending sublevel is specified, it is incremented until | ||
# no further sublevels are found. | ||
|
||
if [ $STOPSUBLEVEL -gt $SUBLEVEL ]; then | ||
while : # incrementing SUBLEVEL (s in v.p.s) | ||
do | ||
CURRENTFULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL" | ||
EXTRAVER= | ||
if [ $stopvers == $CURRENTFULLVERSION ]; then | ||
echo "Stopping at $CURRENTFULLVERSION base as requested." | ||
break | ||
fi | ||
|
||
while : # incrementing EXTRAVER (x in v.p.s.x) | ||
do | ||
EXTRAVER=$((EXTRAVER + 1)) | ||
FULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL.$EXTRAVER" | ||
#echo "... trying $FULLVERSION ..." | ||
|
||
patch=patch-$FULLVERSION | ||
|
||
# See if the file exists and find extension | ||
findFile $patchdir/${patch} || break | ||
|
||
# Apply the patch and check all is OK | ||
applyPatch $patch || break | ||
|
||
continue 2 | ||
done | ||
|
||
EXTRAVER= | ||
SUBLEVEL=$((SUBLEVEL + 1)) | ||
FULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL" | ||
#echo "___ trying $FULLVERSION ___" | ||
#echo "#___ trying $FULLVERSION ___" | ||
|
||
if [ $((SUBLEVEL)) -gt $((STOPSUBLEVEL)) ]; then | ||
echo "Stopping since sublevel ($SUBLEVEL) is beyond stop-sublevel ($STOPSUBLEVEL)" | ||
exit 1 | ||
fi | ||
|
||
patch=patch-$FULLVERSION | ||
|
||
# See if the file exists and find extension | ||
findFile $patchdir/${patch} || break | ||
findFile $patchdir/${patch} || noFile ${patch} | ||
|
||
# Apply the patch and check all is OK | ||
applyPatch $patch || break | ||
done | ||
#echo "base all done" | ||
#echo "#___sublevel all done" | ||
fi | ||
|
||
# There is no incremental searching for extraversion... | ||
if [ "$STOPEXTRA" != "" ]; then | ||
while : # just to allow break | ||
do | ||
# apply STOPEXTRA directly (not incrementally) (x in v.p.s.x) | ||
FULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL.$STOPEXTRA" | ||
#echo "#... trying $FULLVERSION ..." | ||
patch=patch-$FULLVERSION | ||
|
||
# See if the file exists and find extension | ||
findFile $patchdir/${patch} || noFile ${patch} | ||
|
||
# Apply the patch and check all is OK | ||
applyPatch $patch || break | ||
#echo "#___extraver all done" | ||
break | ||
done | ||
fi | ||
|
||
if [ x$gotac != x ]; then | ||
# Out great user wants the -ac patches | ||
|