|
Michal Marek |
0a417c |
#############################################################################
|
|
Michal Marek |
0a417c |
# Copyright (c) 2008,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 |
0a417c |
|
|
Michal Marek |
9bee79 |
# to be sourced by scripts that need a GIT working directory
|
|
Michal Marek |
9bee79 |
|
|
Michal Marek |
9bee79 |
if git rev-parse HEAD >/dev/null 2>&1; then
|
|
Michal Marek |
9bee79 |
using_git=true
|
|
Michal Marek |
9bee79 |
else
|
|
Michal Marek |
9bee79 |
using_git=false
|
|
Michal Marek |
9bee79 |
echo "WARNING: not in a GIT working directory, things might break." >&2
|
|
Michal Marek |
9bee79 |
echo >&2
|
|
Michal Marek |
9bee79 |
fi
|
|
Michal Suchanek |
a075c4 |
scripts_dir="$(dirname "$0")"
|
|
Michal Marek |
9bee79 |
|
|
Michal Marek |
9bee79 |
get_branch_name()
|
|
Michal Marek |
9bee79 |
{
|
|
Michal Marek |
9bee79 |
if $using_git; then
|
|
Michal Marek |
9bee79 |
# FIXME: guess a branch name when a non-branch revision is checked
|
|
Michal Marek |
9bee79 |
# out
|
|
Shung-Hsi Yu |
283838 |
local res=$(sed -ne 's|^ref: refs/heads/||p' "$(git rev-parse --git-dir)"/HEAD 2>/dev/null)
|
|
Michal Marek |
9bee79 |
echo "$res"
|
|
Michal Marek |
9bee79 |
fi
|
|
Michal Marek |
9bee79 |
}
|
|
Michal Marek |
9bee79 |
|
|
Michal Suchanek |
cb2465 |
get_kernel_sig(){
|
|
Michal Suchanek |
cb2465 |
echo "${1%.*}.sign"
|
|
Michal Suchanek |
cb2465 |
}
|
|
Michal Suchanek |
cb2465 |
|
|
Michal Marek |
28d204 |
_find_tarball()
|
|
Michal Marek |
28d204 |
{
|
|
Michal Suchanek |
a075c4 |
local version=$1 suffixes=$2 dir subdir major suffix tarball sig dc
|
|
Michal Marek |
28d204 |
|
|
Michal Marek |
bd3ab7 |
set -- ${version//[.-]/ }
|
|
Michal Marek |
ae9e2c |
if test $1 -le 2; then
|
|
Michal Marek |
ae9e2c |
major=$1.$2
|
|
Michal Marek |
ae9e2c |
else
|
|
Michal Marek |
ae9e2c |
major=$1.x
|
|
Michal Marek |
ae9e2c |
fi
|
|
Michal Marek |
ecce67 |
if test -z "$suffixes"; then
|
|
Michal Marek |
07d135 |
if test -n "$(type -p xz)"; then
|
|
Matthias Brugger |
d4457f |
suffixes="tar.xz tar.bz2 tar.gz"
|
|
Michal Marek |
07d135 |
else
|
|
Michal Marek |
07d135 |
suffixes="tar.bz2"
|
|
Michal Marek |
07d135 |
fi
|
|
Michal Marek |
ecce67 |
fi
|
|
Michal Marek |
6478ac |
for dir in . $MIRROR {/mounts,/labs,}/mirror/kernel; do
|
|
Michal Marek |
bd3ab7 |
for subdir in "" "/v$major" "/testing" "/v$major/testing"; do
|
|
Michal Marek |
ecce67 |
for suffix in $suffixes; do
|
|
Michal Suchanek |
a075c4 |
tarball="$dir$subdir/linux-$version.$suffix"
|
|
Michal Suchanek |
a075c4 |
if test -r "$tarball"; then
|
|
Michal Suchanek |
cb2465 |
sig="$(get_kernel_sig "$tarball")"
|
|
Michal Suchanek |
a075c4 |
if ! [ -r "$sig" ] ; then
|
|
Michal Suchanek |
a075c4 |
echo "Missing signature $sig for tarball $tarball" >&2
|
|
Michal Suchanek |
a075c4 |
continue
|
|
Michal Suchanek |
a075c4 |
fi
|
|
Michal Suchanek |
a075c4 |
echo "Verifying $tarball" >&2
|
|
Michal Suchanek |
a075c4 |
case $suffix in
|
|
Michal Suchanek |
a075c4 |
*.gz) dc="gzip -dc";;
|
|
Michal Suchanek |
a075c4 |
*.xz) dc="xzcat";;
|
|
Michal Suchanek |
a075c4 |
*.bz2) dc="bzip2 -dc";;
|
|
Michal Suchanek |
a075c4 |
*) echo "Unknown archive format $suffix" >&2
|
|
Michal Suchanek |
a075c4 |
continue;;
|
|
Michal Suchanek |
a075c4 |
esac
|
|
Michal Suchanek |
a075c4 |
if ! $dc < "$tarball" | gpgv --keyring "$scripts_dir/linux.keyring" "$sig" - ; then
|
|
Michal Suchanek |
a075c4 |
echo "$tarball signature $sig verification failed" >&2
|
|
Michal Suchanek |
a075c4 |
continue
|
|
Michal Suchanek |
a075c4 |
fi
|
|
Michal Suchanek |
a075c4 |
echo "$tarball"
|
|
Michal Marek |
ecce67 |
return
|
|
Michal Marek |
ecce67 |
fi
|
|
Michal Marek |
ecce67 |
done
|
|
Michal Marek |
bd3ab7 |
done
|
|
Michal Marek |
28d204 |
done
|
|
Michal Marek |
28d204 |
}
|
|
Michal Marek |
28d204 |
|
|
Michal Marek |
28d204 |
_get_tarball_from_git()
|
|
Michal Marek |
28d204 |
{
|
|
|
67bee1 |
local version=$1 tag url=$2 default_url
|
|
Benjamin Poirier |
842e04 |
local libdir=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
|
|
Benjamin Poirier |
a6d98d |
local git
|
|
Michal Marek |
28d204 |
|
|
Benjamin Poirier |
842e04 |
git=$("$libdir"/linux_git.sh) || exit 1
|
|
Michal Marek |
f27800 |
case "$version" in
|
|
Michal Marek |
048a91 |
*next-*)
|
|
Michal Marek |
3a5770 |
tag=refs/tags/next-${version##*next-}
|
|
|
67bee1 |
default_url=git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
|
|
Michal Marek |
f27800 |
;;
|
|
Michal Marek |
f9dafd |
[0-9]*-g???????)
|
|
Michal Marek |
f27800 |
tag="v$version"
|
|
|
67bee1 |
default_url=git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
|
|
Michal Marek |
3a5770 |
;;
|
|
Michal Marek |
3a5770 |
*)
|
|
Michal Marek |
3a5770 |
tag=refs/tags/"v$version"
|
|
|
67bee1 |
default_url=git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
|
|
Michal Marek |
f27800 |
esac
|
|
|
67bee1 |
[ -z "$url" ] && url=$default_url
|
|
Benjamin Poirier |
a6d98d |
if ! git --git-dir="$git" cat-file -e "$tag" 2>/dev/null; then
|
|
Michal Marek |
3a5770 |
case "$tag" in
|
|
Michal Marek |
3a5770 |
refs/tags/*)
|
|
Benjamin Poirier |
a6d98d |
git --git-dir="$git" fetch "$url" "$tag:$tag"
|
|
Michal Marek |
3a5770 |
;;
|
|
Michal Marek |
3a5770 |
*)
|
|
Michal Marek |
3a5770 |
# v2.6.X.Y-rcZ-gabcdef1, not a real tag
|
|
Benjamin Poirier |
a6d98d |
git --git-dir="$git" fetch --tags "$url" \
|
|
Michal Marek |
3a5770 |
refs/heads/master:refs/tags/latest
|
|
Michal Marek |
3a5770 |
esac
|
|
Michal Marek |
3a5770 |
fi
|
|
Benjamin Poirier |
a6d98d |
git --git-dir="$git" archive --prefix="linux-$version/" "$tag"
|
|
Michal Marek |
28d204 |
}
|
|
Michal Marek |
28d204 |
|
|
Michal Marek |
28d204 |
get_tarball()
|
|
Michal Marek |
28d204 |
{
|
|
Michal Suchanek |
cb2465 |
local version=$1 suffix=$2 dest=$3 url=$4 tarball compress sig
|
|
Michal Marek |
28d204 |
|
|
Michal Marek |
ecce67 |
tarball=$(_find_tarball "$version" "$suffix")
|
|
Michal Marek |
28d204 |
if test -n "$tarball"; then
|
|
Michal Suchanek |
cb2465 |
sig="$(get_kernel_sig "$dest/linux-$version.$suffix")"
|
|
Michal Marek |
73a373 |
cp -p "$tarball" "$dest/linux-$version.$suffix.part" || exit
|
|
Michal Suchanek |
cb2465 |
cp -p "$(get_kernel_sig "$tarball")" "$sig.part" || exit
|
|
Michal Marek |
ecce67 |
mv "$dest/linux-$version.$suffix.part" "$dest/linux-$version.$suffix"
|
|
Michal Suchanek |
cb2465 |
mv "$sig.part" "$sig"
|
|
Michal Suchanek |
cb2465 |
cp -p "$scripts_dir/linux.keyring" "$dest"
|
|
Michal Marek |
28d204 |
return
|
|
Michal Marek |
28d204 |
fi
|
|
Michal Marek |
73a373 |
# Reuse the locally generated tarball if already there
|
|
Michal Suchanek |
a075c4 |
tarball="$dest/linux-$version.$suffix"
|
|
Michal Suchanek |
a075c4 |
if test -e "$tarball"; then
|
|
Michal Suchanek |
a075c4 |
echo "Reusing $tarball" >&2
|
|
Michal Suchanek |
cb2465 |
sig="$(get_kernel_sig "$tarball")"
|
|
Michal Suchanek |
cb2465 |
if [ -e $sig ] ; then
|
|
Michal Suchanek |
cb2465 |
echo "Reusing $sig" >&2
|
|
Michal Suchanek |
cb2465 |
cp -p "$scripts_dir/linux.keyring" "$dest"
|
|
Michal Suchanek |
cb2465 |
fi
|
|
Michal Marek |
73a373 |
return
|
|
Michal Marek |
73a373 |
fi
|
|
Michal Marek |
ecce67 |
echo "Warning: could not find linux-$version.$suffix, trying to create it from git" >&2
|
|
Michal Marek |
ecce67 |
case "$suffix" in
|
|
Michal Marek |
ecce67 |
tar.bz2)
|
|
Michal Marek |
ecce67 |
compress="bzip2 -9"
|
|
Michal Marek |
ecce67 |
;;
|
|
Michal Marek |
ecce67 |
tar.xz)
|
|
Michal Marek |
ecce67 |
compress="xz"
|
|
Michal Marek |
ecce67 |
;;
|
|
Michal Marek |
ecce67 |
*)
|
|
Michal Marek |
ecce67 |
echo "Unknown compression format: $suffix" >&2
|
|
Michal Marek |
ecce67 |
exit 1
|
|
Michal Marek |
ecce67 |
esac
|
|
Michal Marek |
28d204 |
set -o pipefail
|
|
|
67bee1 |
_get_tarball_from_git "$version" "$url" | $compress \
|
|
Michal Marek |
ecce67 |
>"$dest/linux-$version.$suffix.part"
|
|
Michal Marek |
28d204 |
if test $? -ne 0; then
|
|
Michal Marek |
28d204 |
exit 1
|
|
Michal Marek |
28d204 |
fi
|
|
Michal Marek |
ecce67 |
mv "$dest/linux-$version.$suffix.part" "$dest/linux-$version.$suffix"
|
|
Michal Marek |
28d204 |
set +o pipefail
|
|
Michal Marek |
28d204 |
}
|
|
Michal Marek |
28d204 |
|
|
Michal Marek |
6616f5 |
unpack_tarball()
|
|
Michal Marek |
6616f5 |
{
|
|
|
67bee1 |
local version=$1 dest=$2 url=$3 tarball
|
|
Michal Marek |
6616f5 |
|
|
Michal Marek |
ecce67 |
tarball=$(_find_tarball "$version")
|
|
Michal Marek |
6616f5 |
mkdir -p "$dest"
|
|
Michal Marek |
6616f5 |
if test -n "$tarball"; then
|
|
Michal Marek |
6616f5 |
echo "Extracting $tarball"
|
|
Jean Delvare |
92fb6d |
case "$tarball" in
|
|
Jean Delvare |
92fb6d |
*.bz2) tar -xjf "$tarball" -C "$dest" --strip-components=1 ;;
|
|
Matthias Brugger |
d4457f |
*.gz) tar -xzf "$tarball" -C "$dest" --strip-components=1 ;;
|
|
Michal Marek |
07d135 |
*.xz) xz -d <"$tarball" | tar -xf - -C "$dest" --strip-components=1 ;;
|
|
Jean Delvare |
92fb6d |
*) tar -xf "$tarball" -C "$dest" --strip-components=1 ;;
|
|
Jean Delvare |
92fb6d |
esac
|
|
Michal Marek |
6616f5 |
return
|
|
Michal Marek |
6616f5 |
fi
|
|
Jean Delvare |
92fb6d |
echo "Warning: could not find linux-$version.tar.(bz2|xz), trying to create it from git" >&2
|
|
Michal Marek |
6616f5 |
echo "alternatively you can put an unpatched kernel tree to $dest" >&2
|
|
Michal Marek |
6616f5 |
set -o pipefail
|
|
|
67bee1 |
_get_tarball_from_git "$version" "$url" | tar -xf - -C "$dest" --strip-components=1
|
|
Michal Marek |
6616f5 |
if test $? -ne 0; then
|
|
Michal Marek |
6616f5 |
rm -rf "$dest"
|
|
Michal Marek |
6616f5 |
exit 1
|
|
Michal Marek |
6616f5 |
fi
|
|
Michal Marek |
6616f5 |
set +o pipefail
|
|
Michal Marek |
6616f5 |
}
|
|
Michal Marek |
6616f5 |
|
|
Benjamin Poirier |
775690 |
get_git_remote() {
|
|
Benjamin Poirier |
775690 |
local branch=$1
|
|
Benjamin Poirier |
775690 |
local remote
|
|
Benjamin Poirier |
775690 |
|
|
Benjamin Poirier |
775690 |
remote=$(git config --get branch.${branch}.remote)
|
|
Benjamin Poirier |
775690 |
remote=${remote:-"<repository>"}
|
|
Benjamin Poirier |
775690 |
echo "$remote"
|
|
Benjamin Poirier |
775690 |
}
|
|
Benjamin Poirier |
775690 |
|
|
Benjamin Poirier |
775690 |
get_git_user() {
|
|
Benjamin Poirier |
775690 |
local remote=$1
|
|
Benjamin Poirier |
775690 |
local user
|
|
Benjamin Poirier |
775690 |
|
|
Benjamin Poirier |
775690 |
if [ "$remote" ]; then
|
|
Benjamin Poirier |
775690 |
user=$(git remote -v show -n | awk '
|
|
Benjamin Poirier |
775690 |
/^'$remote'/ && /\(push\)$/ {
|
|
Benjamin Poirier |
775690 |
match($2, "^(ssh://)?(([^@]+)@)?", a)
|
|
Benjamin Poirier |
775690 |
print a[3]
|
|
Benjamin Poirier |
775690 |
}')
|
|
Benjamin Poirier |
775690 |
fi
|
|
Benjamin Poirier |
775690 |
user=${user:-$LOGNAME}
|
|
Benjamin Poirier |
775690 |
user=${user:-"<user>"}
|
|
Benjamin Poirier |
775690 |
echo "$user"
|
|
Benjamin Poirier |
775690 |
}
|
|
Benjamin Poirier |
775690 |
|
|
Michal Marek |
9bee79 |
if $using_git && test -z "$CHECKED_GIT_HOOKS"; then
|
|
Michal Marek |
9bee79 |
export CHECKED_GIT_HOOKS=1
|
|
Michal Marek |
9bee79 |
if ! "$scripts_dir"/install-git-hooks --check; then
|
|
Michal Marek |
9bee79 |
echo "WARNING: You should run $scripts_dir/install-git-hooks to enable pre-commit checks." >&2
|
|
Michal Marek |
9bee79 |
fi
|
|
Michal Marek |
9bee79 |
fi
|
|
Michal Marek |
9bee79 |
|
|
|
2a75a6 |
get_localversion() {
|
|
|
2a75a6 |
local version=$1
|
|
|
2a75a6 |
|
|
|
2a75a6 |
if [[ "$version" =~ .*-[1-9][0-9]*-g[a-f0-9]+$ ]] # 4.4-rc6-1310-gec0382c
|
|
|
2a75a6 |
then
|
|
|
2a75a6 |
echo "$version" | sed -e "s/.*\(-[1-9][0-9]*-g[a-f0-9]\+\)$/\1/";
|
|
|
2a75a6 |
fi
|
|
|
2a75a6 |
}
|
|
|
2a75a6 |
|
|
Michal Marek |
9bee79 |
# vim: sw=4:sts=4:et
|