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