|
Michal Marek |
f1ef36 |
#!/bin/bash
|
|
Michal Marek |
f1ef36 |
#
|
|
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 |
0a417c |
#
|
|
Michal Marek |
f1ef36 |
# print the mainline / stable commit id this kernel is based on
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
usage()
|
|
Michal Marek |
f1ef36 |
{
|
|
Michal Marek |
f1ef36 |
echo "Usage: $0 -g <mainline kernel git> [-v] [-f] version"
|
|
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 |
git()
|
|
Michal Marek |
f1ef36 |
{
|
|
Michal Marek |
f1ef36 |
(cd "$git"; command git "$@")
|
|
Michal Marek |
f1ef36 |
}
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
rev_parse()
|
|
Michal Marek |
f1ef36 |
{
|
|
Michal Marek |
f1ef36 |
git rev-parse --verify "$@"
|
|
Michal Marek |
f1ef36 |
}
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
git=
|
|
Michal Marek |
f1ef36 |
quiet=-q
|
|
Michal Marek |
f1ef36 |
force=false
|
|
Michal Marek |
f1ef36 |
options=$(getopt -n "$0" -o g:vfh --long git:,verbose,force,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 |
-g | --git)
|
|
Michal Marek |
f1ef36 |
git=$2
|
|
Michal Marek |
f1ef36 |
shift 2
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
f1ef36 |
-v | --verbose)
|
|
Michal Marek |
f1ef36 |
quiet=
|
|
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 |
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 -z "$git" -o $# -ne 1; then
|
|
Michal Marek |
f1ef36 |
usage >&2
|
|
Michal Marek |
f1ef36 |
exit 1
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
f1ef36 |
base=$1
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
sanity_check()
|
|
Michal Marek |
f1ef36 |
{
|
|
Michal Marek |
9ce091 |
if ! $force && ! rev_parse 1da177e4c3^0 >/dev/null; then
|
|
Michal Marek |
f1ef36 |
die "$git does not look like Linus' kernel repository"
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
9ce091 |
}
|
|
Michal Marek |
9ce091 |
|
|
Michal Marek |
9ce091 |
# hardcoded list of a few -bk snapshots used in the suse kernels,
|
|
Michal Marek |
9ce091 |
# generated by the bk-commit script
|
|
Michal Marek |
9ce091 |
hardcoded_ids=(
|
|
Michal Marek |
9ce091 |
2.6.8-rc4-bk1 783707a1a3fd16d70938a53dd598f6dcd4a6acd2
|
|
Michal Marek |
9ce091 |
2.6.8-rc4-bk2 da58de4bc4757780df70c71195ced7f4611102ca
|
|
Michal Marek |
9ce091 |
2.6.10-rc3-bk10 9d53e4dd111c4bcb1f55961fce39823e340016f6
|
|
Michal Marek |
9ce091 |
2.6.10-rc3-bk14 0233f53fa39d43e2f923c3485502b0461cecc0d7
|
|
Michal Marek |
9ce091 |
2.6.11-rc1-bk8 f21ec4092851e6d7939d7c2a49ac94947840f789
|
|
Michal Marek |
9ce091 |
2.6.11-rc2-bk1 dea9f2aa018246b995d582b8670b362c9cdc69f4
|
|
Michal Marek |
9ce091 |
2.6.11-rc2-bk2 b82f54f7ca17c0ee66bbbc6216275727beef4645
|
|
Michal Marek |
9ce091 |
2.6.11-rc2-bk3 31d881c779c6b98a306c2b0b6063827fb4076102
|
|
Michal Marek |
9ce091 |
2.6.11-rc2-bk4 0bfe221f282f6050b0e999efa9840f67b4fc4d86
|
|
Michal Marek |
9ce091 |
2.6.11-rc2-bk5 c4eadeb71803d271a4b1c09f976824190e4f1f60
|
|
Michal Marek |
9ce091 |
2.6.11-rc2-bk6 c3dfb72cd40074699d7c0940bb0dab976d764952
|
|
Michal Marek |
9ce091 |
2.6.11-rc2-bk7 c923dd8bf3a6002c27ffc23bd11c5f9d86a779ca
|
|
Michal Marek |
9ce091 |
2.6.11-rc2-bk8 31ae6999d2d740b826610547a0fc72382c8c8985
|
|
Michal Marek |
9ce091 |
2.6.11-rc2-bk9 2db1b65b7049001d1451ab1d678da6136b6bbf1c
|
|
Michal Marek |
9ce091 |
2.6.11-rc2-bk10 b389f3821f284617ea17a11ca750d78d1e1cbfc5
|
|
Michal Marek |
9ce091 |
2.6.11-rc3-bk1 b8a743970378fc8e3206b1b4fcdbecc5f37732f5
|
|
Michal Marek |
9ce091 |
2.6.11-rc3-bk2 f69229f575d96cbd0ba28927b734e11fdfe3b51c
|
|
Michal Marek |
9ce091 |
2.6.11-rc3-bk3 1581782eada791b39ffb9de30b8e88b235d87af7
|
|
Michal Marek |
9ce091 |
2.6.11-rc3-bk4 72aa1a6208693f23aec38d8156f60323c2ef61d4
|
|
Michal Marek |
9ce091 |
2.6.11-rc3-bk5 26815161adef49875c03f19536c2c176d638c151
|
|
Michal Marek |
9ce091 |
2.6.11-rc3-bk6 3d23006057f7aaaf01b53305327d542a72626fe5
|
|
Michal Marek |
9ce091 |
2.6.11-rc3-bk7 f24ad951c5114bcfb587b4f348969c002215a2b4
|
|
Michal Marek |
9ce091 |
2.6.11-rc3-bk8 eeca3f3459cae2a1446b1a9b9b1a2c0805471b21
|
|
Michal Marek |
9ce091 |
2.6.11-rc3-bk9 d007c49cc9d6d0e8542320549e74bdd8bf82ccb4
|
|
Michal Marek |
9ce091 |
2.6.11-rc4-bk2 d14d4021344ded14661bf0507098ac14a6c78051
|
|
Michal Marek |
9ce091 |
2.6.11-rc4-bk3 547b39b5be57eee77e574ce55aef1ea3d9151e54
|
|
Michal Marek |
9ce091 |
2.6.11-rc4-bk4 5ff974d98118d600159788c9637d013df8361fa7
|
|
Michal Marek |
9ce091 |
2.6.11-rc4-bk5 9a7a579e7532dc9c8ca995c0bd247bd8f0c9f696
|
|
Michal Marek |
9ce091 |
2.6.11-rc4-bk6 28ad2df3a4f2471f8de501ec9e1eefca42b08f93
|
|
Michal Marek |
9ce091 |
2.6.11-rc4-bk7 175df1ee8b945ea85682f82112766c029327c9d8
|
|
Michal Marek |
9ce091 |
2.6.11-rc4-bk8 fca717c5fe8afad05b62bd84b1b88076e50df89d
|
|
Michal Marek |
9ce091 |
2.6.11-rc4-bk9 c0d51c67f9c398279a95c5a7df387f2d9a586c98
|
|
Michal Marek |
9ce091 |
2.6.11-rc4-bk10 21e99435aee5b96f9db89bc7b03be98ec3be4fbc
|
|
Michal Marek |
9ce091 |
2.6.11-rc4-bk11 9f459dee9e73e90a0a357e5bf53b4bc56282c1da
|
|
Michal Marek |
9ce091 |
2.6.11-rc5-bk1 6101e24910aee642d8bafe2c8dda3ef739353542
|
|
Michal Marek |
9ce091 |
2.6.11-rc5-bk2 8ad4c6043159b2c80e8a44d45cc134af31bb4b01
|
|
Michal Marek |
9ce091 |
2.6.11-rc5-bk3 54077d3c29a1afba9fe5a0c91f4a24d34083e764
|
|
Michal Marek |
9ce091 |
2.6.11-rc5-bk4 a847f56464f9737ddb11a7e41f63b142b237b776
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
9ce091 |
2.6.11 1274fcd685ec15f10261f48dc990367c2180d589
|
|
Michal Marek |
9ce091 |
)
|
|
Michal Marek |
9ce091 |
|
|
Michal Marek |
9ce091 |
fetch_from()
|
|
Michal Marek |
9ce091 |
{
|
|
Michal Marek |
9ce091 |
local url="git://git.kernel.org/pub/scm/linux/kernel/git/$1"
|
|
Michal Marek |
9ce091 |
local version=$2 refspec
|
|
Michal Marek |
9ce091 |
local name=${1%.git}
|
|
Michal Marek |
9ce091 |
|
|
Michal Marek |
9ce091 |
name=${name##**/}
|
|
Michal Marek |
9ce091 |
case "$version" in
|
|
Michal Marek |
9502a1 |
*.* )
|
|
Michal Marek |
9ce091 |
version=v${version}
|
|
Michal Marek |
9ce091 |
esac
|
|
Michal Marek |
9ce091 |
base_id=$(rev_parse "$version^{commit}")
|
|
Michal Marek |
9ce091 |
if test -n "$base_id"; then
|
|
Michal Marek |
9ce091 |
return 0
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
9ce091 |
refspec=($(git ls-remote "$url" | \
|
|
Michal Marek |
9502a1 |
sed -rn -e 's@.*(refs/tags/v[1-9][^^]*)$@\1:\1@p' -e \
|
|
Michal Marek |
9ce091 |
"s@.*(refs/heads/master)\$@\\1:upstream/$name@p"))
|
|
Michal Marek |
9ce091 |
case "$version" in
|
|
Michal Marek |
9502a1 |
v*)
|
|
Michal Marek |
9ce091 |
if ! echo "${refspec[@]}" | grep -q "/$version:"; then
|
|
Michal Marek |
9502a1 |
# if we are looking for a v* tag and it is not there,
|
|
Michal Marek |
9ce091 |
# do not bother fetching anything
|
|
Michal Marek |
9ce091 |
return 1
|
|
Michal Marek |
9ce091 |
fi
|
|
Michal Marek |
9ce091 |
esac
|
|
Michal Marek |
9ce091 |
git fetch $quiet "$url" "${refspec[@]}"
|
|
Michal Marek |
9ce091 |
base_id=$(rev_parse "$version^{commit}")
|
|
Michal Marek |
9ce091 |
test -n "$base_id"
|
|
Michal Marek |
9ce091 |
}
|
|
Michal Marek |
9ce091 |
|
|
Michal Marek |
9ce091 |
kernel_version()
|
|
Michal Marek |
9ce091 |
{
|
|
Michal Marek |
9ce091 |
local version=$1 major minor micro
|
|
Michal Marek |
9ce091 |
|
|
Michal Marek |
2f8429 |
version=${version%%[^0-9.]*}
|
|
Michal Marek |
2f8429 |
local IFS=.
|
|
Michal Marek |
2f8429 |
set -- $version
|
|
Michal Marek |
2f8429 |
major=$1
|
|
Michal Marek |
2f8429 |
minor=$2
|
|
Michal Marek |
2f8429 |
micro=$3
|
|
Michal Marek |
2f8429 |
expr "$major" '*' 65536 '+' "0$minor" '*' 256 + "0$micro"
|
|
Michal Marek |
f1ef36 |
}
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
get_base_id()
|
|
Michal Marek |
f1ef36 |
{
|
|
Michal Marek |
f1ef36 |
local base=$1
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
base_id=
|
|
Michal Marek |
9ce091 |
for ((i = 0; i < ${#hardcoded_ids[@]}; i += 2)); do
|
|
Michal Marek |
9ce091 |
if test "$base" = "${hardcoded_ids[i]}"; then
|
|
Michal Marek |
9ce091 |
base_id=${hardcoded_ids[i+1]}
|
|
Michal Marek |
9ce091 |
fetch_from "tglx/history.git" "$base_id"
|
|
Michal Marek |
9ce091 |
return
|
|
Michal Marek |
9ce091 |
fi
|
|
Michal Marek |
9ce091 |
done
|
|
Michal Marek |
9ce091 |
if test "$base" = "2.6.12git9"; then
|
|
Michal Marek |
9ce091 |
base=2.6.12-git9
|
|
Michal Marek |
9ce091 |
fi
|
|
Michal Marek |
f1ef36 |
case "$base" in
|
|
Michal Marek |
f1ef36 |
2.6.*-git*)
|
|
Michal Marek |
9ce091 |
local url="http://www.kernel.org/pub/linux/kernel/v2.6/snapshots"
|
|
Michal Marek |
f1ef36 |
base_id=$(curl -f -s "$url/patch-$base.id")
|
|
Michal Marek |
f1ef36 |
if test -z "$base_id"; then
|
|
Michal Marek |
f1ef36 |
base_id=$(curl -f -s "$url/old/patch-$base.id")
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
9ce091 |
if test -n "$base_id"; then
|
|
Michal Marek |
9ce091 |
fetch_from "torvalds/linux-2.6.git" "$base_id"
|
|
Michal Marek |
9ce091 |
return
|
|
Michal Marek |
9ce091 |
fi
|
|
Michal Marek |
9ce091 |
esac
|
|
Michal Marek |
9ce091 |
if test $(kernel_version "$base") -le $(kernel_version 2.6.11); then
|
|
Michal Marek |
9ce091 |
fetch_from "tglx/history.git" "$base"
|
|
Michal Marek |
9ce091 |
if test -n "$base_id"; then
|
|
Michal Marek |
9ce091 |
return
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
9ce091 |
fi
|
|
Michal Marek |
9502a1 |
local is_stable=false
|
|
Michal Marek |
9ce091 |
case "$base" in
|
|
Michal Marek |
384948 |
[3-9].*.0-rc* | [1-9][0-9].*.0-rc*)
|
|
Michal Marek |
04cbe4 |
base=${base/.0-/-}
|
|
Michal Marek |
384948 |
;;
|
|
Michal Marek |
384948 |
[3-9].*.0 | [1-9][0-9].*.0)
|
|
Michal Marek |
384948 |
base=${base%.0}
|
|
Michal Marek |
04cbe4 |
esac
|
|
Michal Marek |
04cbe4 |
case "$base" in
|
|
Michal Marek |
9ce091 |
2.6.11.*)
|
|
Michal Marek |
9ce091 |
# The history tree has 2.6.11.y up to 2.6.11.5; but there
|
|
Michal Marek |
9ce091 |
# is no tree for the rest and I don't plan to create any
|
|
Michal Marek |
9ce091 |
base_id=0
|
|
Michal Marek |
9ce091 |
;;
|
|
Michal Marek |
9ce091 |
2.6.*-rt*)
|
|
Michal Marek |
9ce091 |
fetch_from "tip/linux-2.6-tip.git"
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
9502a1 |
2.6.*.* | [3-9].*.* | [1-9][0-9].*.* )
|
|
Michal Marek |
9502a1 |
is_stable=true
|
|
Hannes Reinecke |
72c492 |
if ! fetch_from "stable/linux-stable.git" "$base"; then
|
|
Michal Marek |
9ce091 |
fetch_from "longterm/linux-${base%.*}.y.git" "$base"
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
9502a1 |
2.6.* | [3-9].* | [1-9][0-9].*)
|
|
Hannes Reinecke |
72c492 |
fetch_from "torvalds/linux.git" "$base"
|
|
Michal Marek |
f1ef36 |
;;
|
|
Michal Marek |
9ce091 |
*)
|
|
Michal Marek |
9ce091 |
die "Unexpected kernel version $base"
|
|
Michal Marek |
f1ef36 |
esac
|
|
Michal Marek |
9ce091 |
if test -z "$base_id"; then
|
|
Michal Marek |
9ce091 |
case "$base" in
|
|
Michal Marek |
9ce091 |
2.6.*-rt*)
|
|
Michal Marek |
9ce091 |
# not all rt releases are tagged in tip
|
|
Michal Marek |
9ce091 |
base_id=0
|
|
Michal Marek |
9ce091 |
;;
|
|
Michal Marek |
9502a1 |
*-rc* )
|
|
Michal Marek |
9502a1 |
if $is_stable; then
|
|
Michal Marek |
9502a1 |
# RCs for stable are typically not in git
|
|
Michal Marek |
9502a1 |
base_id=0
|
|
Michal Marek |
9502a1 |
fi
|
|
Michal Marek |
9502a1 |
;;
|
|
Michal Marek |
9ce091 |
esac
|
|
Michal Marek |
9ce091 |
fi
|
|
Michal Marek |
f1ef36 |
}
|
|
Michal Marek |
f1ef36 |
|
|
Michal Marek |
f1ef36 |
sanity_check >&2
|
|
Michal Marek |
f1ef36 |
get_base_id "$base" >&2
|
|
Michal Marek |
f1ef36 |
if test -z "$base_id"; then
|
|
Michal Marek |
f1ef36 |
die "Cannot match $base to commit id"
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
9ce091 |
if test "$base_id" = 0; then
|
|
Michal Marek |
9ce091 |
echo "Warning: no id for $base" >&2
|
|
Michal Marek |
9ce091 |
elif ! rev_parse "$base_id^{commit}" >/dev/null; then
|
|
Michal Marek |
9ce091 |
die "internal error: got bogus id $base_id for $base"
|
|
Michal Marek |
f1ef36 |
fi
|
|
Michal Marek |
f1ef36 |
echo "$base_id"
|
|
Michal Marek |
f1ef36 |
|