|
Michal Marek |
f1ef36 |
#!/bin/bash
|
|
Michal Marek |
0a417c |
#############################################################################
|
|
Michal Marek |
0a417c |
# Copyright (c) 2009 Novell, Inc.
|
|
Michal Marek |
0a417c |
# All Rights Reserved.
|
|
Michal Marek |
0a417c |
#
|
|
Michal Marek |
0a417c |
# This program is free software; you can redistribute it and/or
|
|
Michal Marek |
0a417c |
# modify it under the terms of version 2 of the GNU General Public License as
|
|
Michal Marek |
0a417c |
# published by the Free Software Foundation.
|
|
Michal Marek |
0a417c |
#
|
|
Michal Marek |
0a417c |
# This program is distributed in the hope that it will be useful,
|
|
Michal Marek |
0a417c |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Michal Marek |
0a417c |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Michal Marek |
0a417c |
# GNU General Public License for more details.
|
|
Michal Marek |
0a417c |
#
|
|
Michal Marek |
0a417c |
# You should have received a copy of the GNU General Public License
|
|
Michal Marek |
0a417c |
# along with this program; if not, contact Novell, Inc.
|
|
Michal Marek |
0a417c |
#
|
|
Michal Marek |
0a417c |
# To contact Novell about this file by physical or electronic mail,
|
|
Michal Marek |
0a417c |
# you may find current contact information at www.novell.com
|
|
Michal Marek |
0a417c |
#############################################################################
|
|
Michal Marek |
f1ef36 |
#
|
|
Michal Marek |
f1ef36 |
# Apply the patch series to a linux git repository. Note that the generated
|
|
Michal Marek |
f1ef36 |
# branch will differ each time, it is only meant as an alternative to quilt
|
|
Michal Marek |
f1ef36 |
# annotate and friends, it should not be pushed anywhere.
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
usage()
|
|
Michal Marek |
f1ef36 |
{
|
|
Michal Marek |
c71409 |
echo "Usage: $0 -g <mainline kernel git> [-b <branch>] [-v] [-f] [-s|-n] [-a] [-X]"
|
|
Michal Marek |
f1ef36 |
echo "branch is $branch by default"
|
|
Michal Marek |
f1ef36 |
}
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
die()
|
|
Michal Marek |
f1ef36 |
{
|
|
Michal Marek |
f1ef36 |
echo "$@" >&2
|
|
Michal Marek |
f1ef36 |
exit 1
|
|
Michal Marek |
f1ef36 |
}
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
# perform a git command in linux-2.6 git tree
|
|
Michal Marek |
f1ef36 |
l_git()
|
|
Michal Marek |
f1ef36 |
{
|
|
Michal Marek |
f1ef36 |
(cd "$git"; command git "$@")
|
|
Michal Marek |
f1ef36 |
}
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
23e95a |
. scripts/wd-functions.sh
|
|
Michal Marek |
f1ef36 |
branch="suse/$(get_branch_name)"
|
|
Michal Marek |
f1ef36 |
if test "$branch" = "suse/"; then
|
|
Michal Marek |
f1ef36 |
branch="suse/unknown"
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
f1ef36 |
git=
|
|
Michal Marek |
f1ef36 |
verbose=false
|
|
Michal Marek |
f1ef36 |
force=false
|
|
Michal Marek |
091dda |
skip=true
|
|
Michal Marek |
091dda |
use_applied=false
|
|
Michal Marek |
462ff7 |
skip_xen=false
|
|
Michal Marek |
091dda |
last_patch=
|
|
Michal Marek |
23e95a |
. rpm/config.sh
|
|
Michal Marek |
091dda |
# sles10 doesn't use pristine stable patches
|
|
Michal Marek |
23e95a |
case "$IBS_PROJECT" in
|
|
Michal Marek |
23e95a |
SUSE:SLE-10*)
|
|
Michal Marek |
091dda |
skip=false
|
|
Michal Marek |
091dda |
esac
|
|
Hannes Reinecke |
ace88d |
options=$(getopt -n "$0" -o ab:g:vsnS:Xfh --long branch:,git:,verbose,use-applied,force,skip,no-skip,no-xen,symbols:,help -- "$@")
|
|
Michal Marek |
f1ef36 |
if test $? != 0; then
|
|
Michal Marek |
f1ef36 |
usage >&2
|
|
Michal Marek |
f1ef36 |
exit 1
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
f1ef36 |
eval set -- "$options"
|
|
Michal Marek |
f1ef36 |
while test $# -gt 0; do
|
|
Michal Marek |
f1ef36 |
case "$1" in
|
|
Michal Marek |
f1ef36 |
-b | --branch)
|
|
Michal Marek |
f1ef36 |
branch=$2
|
|
Michal Marek |
f1ef36 |
shift 2
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
f1ef36 |
-g | --git)
|
|
Michal Marek |
f1ef36 |
git=$2
|
|
Michal Marek |
f1ef36 |
shift 2
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
f1ef36 |
-v | --verbose)
|
|
Michal Marek |
f1ef36 |
verbose=true
|
|
Michal Marek |
f1ef36 |
shift
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
f1ef36 |
-f | --force)
|
|
Michal Marek |
f1ef36 |
force=true
|
|
Michal Marek |
f1ef36 |
shift
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
091dda |
-a | --use-applied)
|
|
Michal Marek |
091dda |
use_applied=true
|
|
Michal Marek |
091dda |
shift
|
|
Michal Marek |
091dda |
;;
|
|
Michal Marek |
091dda |
-s | --skip)
|
|
Michal Marek |
091dda |
skip=true
|
|
Michal Marek |
091dda |
shift
|
|
Michal Marek |
091dda |
;;
|
|
Michal Marek |
091dda |
-n | --no-skip)
|
|
Michal Marek |
091dda |
skip=false
|
|
Michal Marek |
091dda |
shift
|
|
Michal Marek |
091dda |
;;
|
|
Michal Marek |
c71409 |
-X | --no-xen)
|
|
Michal Marek |
c71409 |
skip_xen=true
|
|
Michal Marek |
c71409 |
shift
|
|
Michal Marek |
c71409 |
;;
|
|
Hannes Reinecke |
ace88d |
-S | --symbols)
|
|
Hannes Reinecke |
ace88d |
EXTRA_SYMBOLS=$2
|
|
Hannes Reinecke |
40e1d5 |
shift 2
|
|
Hannes Reinecke |
ace88d |
;;
|
|
Michal Marek |
f1ef36 |
-h | --help)
|
|
Michal Marek |
f1ef36 |
usage
|
|
Michal Marek |
f1ef36 |
exit 0
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
f1ef36 |
--)
|
|
Michal Marek |
f1ef36 |
shift
|
|
Michal Marek |
f1ef36 |
break
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
f1ef36 |
esac
|
|
Michal Marek |
f1ef36 |
done
|
|
Michal Marek |
f1ef36 |
if test $# -gt 0; then
|
|
Michal Marek |
f1ef36 |
echo "$0: too many arguments"
|
|
Michal Marek |
f1ef36 |
usage >&2
|
|
Michal Marek |
f1ef36 |
exit 1
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
f1ef36 |
if test -z "$git"; then
|
|
Michal Marek |
f1ef36 |
usage >&2
|
|
Michal Marek |
f1ef36 |
exit 1
|
|
Michal Marek |
f1ef36 |
fi
|
|
Hannes Reinecke |
ace88d |
if [ -s extra-symbols ] ; then
|
|
Hannes Reinecke |
ace88d |
EXTRA_SYMBOLS="$EXTRA_SYMBOLS $(cat extra-symbols)"
|
|
Hannes Reinecke |
ace88d |
fi
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
091dda |
if ! $skip; then
|
|
Michal Marek |
091dda |
base="$SRCVERSION"
|
|
Michal Marek |
f1ef36 |
else
|
|
Michal Marek |
23e95a |
if test -x rpm/compute-PATCHVERSION.sh; then
|
|
Michal Marek |
091dda |
base=$("$_")
|
|
Michal Marek |
091dda |
else
|
|
Michal Marek |
23e95a |
base=$(scripts/compute-PATCHVERSION.sh)
|
|
Michal Marek |
091dda |
fi
|
|
Michal Marek |
091dda |
fi
|
|
Michal Marek |
091dda |
if $use_applied ; then
|
|
Michal Marek |
091dda |
cur_branch=$(l_git branch | sed -n 's/^\* //p')
|
|
Michal Marek |
091dda |
if test "$cur_branch" != "$branch"; then
|
|
Michal Marek |
091dda |
echo "branch is $cur_branch, cannot use current branch"
|
|
Michal Marek |
091dda |
use_applied=false
|
|
Michal Marek |
091dda |
fi
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
091dda |
if $use_applied ; then
|
|
Michal Marek |
091dda |
last_patch=$(l_git show | sed -n 's/^ *Patch-name: //p')
|
|
Michal Marek |
091dda |
if $force ; then
|
|
Michal Marek |
091dda |
l_git reset --hard
|
|
Michal Marek |
091dda |
fi
|
|
Michal Marek |
091dda |
else
|
|
Michal Marek |
091dda |
args=(--git "$git")
|
|
Michal Marek |
091dda |
$verbose && args[${#args[@]}]="--verbose"
|
|
Michal Marek |
091dda |
$force && args[${#args[@]}]="--force"
|
|
Michal Marek |
091dda |
base_id=$("${0%/*}"/mainline-commit "${args[@]}" "$base") || exit
|
|
Michal Marek |
091dda |
echo "base is $base (${base_id:0:7})"
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
091dda |
# workaround "cannot delete branch which you are currently on" errors
|
|
Michal Marek |
091dda |
l_git checkout -q HEAD^0 || exit
|
|
Michal Marek |
091dda |
l_git branch -f "$branch" "$base_id" || exit
|
|
Michal Marek |
091dda |
l_git checkout "$branch" || exit
|
|
Michal Marek |
091dda |
fi
|
|
Michal Marek |
af1abf |
tmp=$(mktemp -d /dev/shm/series2git.XXXXXXXX) || exit
|
|
Michal Marek |
af1abf |
trap 'rm -rf "$tmp"' EXIT
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
ex_hdr()
|
|
Michal Marek |
f1ef36 |
{
|
|
Michal Marek |
f1ef36 |
local header=$1
|
|
Michal Marek |
f1ef36 |
shift
|
|
Michal Marek |
f1ef36 |
sed -n "s/^$header: *//p; T; q" "$@"
|
|
Michal Marek |
f1ef36 |
}
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
apply_patch()
|
|
Michal Marek |
f1ef36 |
{
|
|
Michal Marek |
f1ef36 |
local patch=$1
|
|
Michal Marek |
af1abf |
|
|
Michal Marek |
af1abf |
rm -rf "$tmp/backup"
|
|
Michal Marek |
af1abf |
mkdir "$tmp/backup"
|
|
Michal Marek |
af1abf |
patch -d "$git" -s --backup --prefix="$tmp/backup/" -p1 --force -i "$PWD/$patch" || return
|
|
Michal Marek |
af1abf |
l_git add $(find "$tmp/backup" -type f -printf '%P\n')
|
|
Michal Marek |
af1abf |
|
|
Michal Marek |
f1ef36 |
local from=$(ex_hdr From "$patch")
|
|
Michal Marek |
bb2753 |
if test -z "$from"; then
|
|
Michal Marek |
bb2753 |
from=$(ex_hdr Author "$patch")
|
|
Michal Marek |
bb2753 |
fi
|
|
Michal Marek |
bb2753 |
if test -z "$from"; then
|
|
Michal Marek |
bb2753 |
from="Unknown Hero <unknown@example.com>"
|
|
Michal Marek |
bb2753 |
fi
|
|
Michal Marek |
f1ef36 |
case "$from" in
|
|
Michal Marek |
f1ef36 |
*"<"*@*">")
|
|
Michal Marek |
f1ef36 |
GIT_AUTHOR_NAME=${from% <*}
|
|
Michal Marek |
f1ef36 |
GIT_AUTHOR_EMAIL="<${from##*<}"
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
f1ef36 |
*@*)
|
|
Michal Marek |
f1ef36 |
GIT_AUTHOR_NAME=${from%%@*}
|
|
Michal Marek |
f1ef36 |
GIT_AUTHOR_NAME=${GIT_AUTHOR_NAME#<}
|
|
Michal Marek |
f1ef36 |
GIT_AUTHOR_EMAIL=$from
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
f1ef36 |
*)
|
|
Michal Marek |
f1ef36 |
GIT_AUTHOR_NAME=$from
|
|
Michal Marek |
f1ef36 |
GIT_AUTHOR_EMAIL=
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
f1ef36 |
esac
|
|
Takashi Iwai |
3d0cc0 |
local subject=$(ex_hdr Subject "$patch" | sed -es'/\[[^]]*\] //')
|
|
Michal Marek |
9fd62c |
GIT_AUTHOR_DATE=$(ex_hdr Date "$patch")
|
|
Robert Richter |
1a740a |
GIT_AUTHOR_DATE=$(ex_hdr Date "$patch" \
|
|
Robert Richter |
1a740a |
| perl -p -e 's/(\d\d:\d\d:\d\d) (\d{4})/$2 $1/;s/:$//')
|
|
Michal Marek |
f3c6f4 |
if test -n "$GIT_AUTHOR_DATE"; then
|
|
Michal Marek |
9fd62c |
GIT_AUTHOR_DATE=$(date -R -d"$GIT_AUTHOR_DATE" 2>/dev/null)
|
|
Michal Marek |
f3c6f4 |
fi
|
|
Michal Marek |
f1ef36 |
export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE
|
|
Michal Marek |
f1ef36 |
(
|
|
Michal Marek |
f1ef36 |
echo "$subject"
|
|
Michal Marek |
f1ef36 |
echo
|
|
Michal Marek |
f1ef36 |
sed -r '/^(Subject|From|Date):/d; /^(---$|--- |diff |Index:)/ Q' "$patch"
|
|
Michal Marek |
f1ef36 |
echo
|
|
Michal Marek |
f1ef36 |
echo "Patch-name: $patch"
|
|
Michal Marek |
91c33b |
) | git stripspace | l_git commit -n -q -F -
|
|
Michal Marek |
f1ef36 |
}
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
23e95a |
scripts/guards $EXTRA_SYMBOLS < series.conf | while read patch; do
|
|
Michal Marek |
f1ef36 |
case "$patch" in
|
|
Michal Marek |
f1ef36 |
patches.kernel.org/patch-2.6.*.*-rc*)
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Suchanek |
79c578 |
patches.kernel.org/*)
|
|
Michal Marek |
091dda |
if $skip; then
|
|
Michal Marek |
091dda |
echo "skipping $patch"
|
|
Michal Marek |
091dda |
continue
|
|
Michal Marek |
091dda |
fi
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
c71409 |
patches.xen/*)
|
|
Michal Marek |
c71409 |
if $skip_xen; then
|
|
Michal Marek |
c71409 |
echo "skipping remaining Xen patches"
|
|
Michal Marek |
c71409 |
break
|
|
Michal Marek |
c71409 |
fi
|
|
Michal Marek |
c71409 |
;;
|
|
Michal Marek |
f1ef36 |
esac
|
|
Michal Marek |
091dda |
if test -n "$last_patch"; then
|
|
Michal Marek |
091dda |
if test "$patch" != "$last_patch" ; then
|
|
Michal Marek |
091dda |
echo "skipping $patch"
|
|
Michal Marek |
091dda |
continue
|
|
Michal Marek |
091dda |
fi
|
|
Michal Marek |
091dda |
echo "skipping $patch"
|
|
Michal Marek |
091dda |
last_patch=
|
|
Michal Marek |
091dda |
continue
|
|
Michal Marek |
091dda |
fi
|
|
Michal Marek |
f1ef36 |
if $verbose; then
|
|
Michal Marek |
f1ef36 |
echo "[ $patch ]"
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
f1ef36 |
apply_patch "$patch" || die "*** $patch failed ***"
|
|
Michal Marek |
f1ef36 |
if ! $verbose; then
|
|
Michal Marek |
f1ef36 |
echo -n "."
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
f1ef36 |
done
|
|
Michal Marek |
f1ef36 |
echo
|
|
Michal Marek |
f1ef36 |
l_git checkout -f
|