182 lines
5.2 KiB
Bash
182 lines
5.2 KiB
Bash
|
#!/bin/bash
|
||
|
# Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
|
||
|
#
|
||
|
# You can use this to make stable compat-wireless releases
|
||
|
#
|
||
|
# The assumption is you have the linux-2.6-allstable git tree on your $HOME
|
||
|
# git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-allstable.git
|
||
|
#
|
||
|
# Local branches will be created based on the remote linux-2.6.X.y branches.
|
||
|
# If your branch already exists we will nuke it for you to avoid rebasing.
|
||
|
#
|
||
|
# If no kernel is specified we use the latest rc-release, which will be on the
|
||
|
# remove master branch. Your master branch should be clean.
|
||
|
|
||
|
# Pretty colors
|
||
|
GREEN="\033[01;32m"
|
||
|
YELLOW="\033[01;33m"
|
||
|
NORMAL="\033[00m"
|
||
|
BLUE="\033[34m"
|
||
|
RED="\033[31m"
|
||
|
PURPLE="\033[35m"
|
||
|
CYAN="\033[36m"
|
||
|
UNDERLINE="\033[02m"
|
||
|
|
||
|
ALL_STABLE_TREE="linux-2.6-allstable"
|
||
|
STAGING=/tmp/staging/compat-wireless/
|
||
|
|
||
|
function usage()
|
||
|
{
|
||
|
echo -e "Usage: ${GREEN}$1${NORMAL} ${BLUE}[ -n | -p | -c | -f | -i ]${NORMAL} ${CYAN}[ linux-2.6.X.y ]${NORMAL}"
|
||
|
echo
|
||
|
echo Examples usages:
|
||
|
echo
|
||
|
echo -e "${PURPLE}${1}${NORMAL}"
|
||
|
echo -e "${PURPLE}${1} ${CYAN}linux-2.6.29.y${NORMAL}"
|
||
|
echo -e "${PURPLE}${1} ${CYAN}linux-2.6.30.y${NORMAL}"
|
||
|
echo
|
||
|
echo -e "If no kernel is specified we try to make a release based on the latest RC kernel."
|
||
|
echo -en "If a kernel release is specified ${CYAN}X${NORMAL} is the next stable release "
|
||
|
echo -en "as ${CYAN}35${NORMAL} in ${CYAN}2.6.35.y${NORMAL}\n"
|
||
|
exit
|
||
|
}
|
||
|
|
||
|
UPDATE_ARGS=""
|
||
|
POSTFIX_RELEASE_TAG="-"
|
||
|
|
||
|
export GIT_TREE=$HOME/$ALL_STABLE_TREE
|
||
|
COMPAT_WIRELESS_DIR=$(pwd)
|
||
|
COMPAT_WIRELESS_BRANCH=$(git branch | grep \* | awk '{print $2}')
|
||
|
|
||
|
cd $GIT_TREE
|
||
|
# --abbrev=0 on branch should work but I guess it doesn't on some releases
|
||
|
EXISTING_BRANCH=$(git branch | grep \* | awk '{print $2}')
|
||
|
|
||
|
# target branch we want to use from hpa's tree, by default
|
||
|
# this respects the existing branch on the target kernel.
|
||
|
# You can override the target branch by specifying an argument
|
||
|
# to this script.
|
||
|
TARGET_BRANCH="$EXISTING_BRANCH"
|
||
|
|
||
|
# By default we will not do a git fetch and reset of the branch,
|
||
|
# use -f if you want to force an update, this will delete all
|
||
|
# of your local patches so be careful.
|
||
|
FORCE_UPDATE="no"
|
||
|
|
||
|
while [ $# -ne 0 ]; do
|
||
|
if [[ "$1" = "-s" ]]; then
|
||
|
UPDATE_ARGS="${UPDATE_ARGS} $1 refresh"
|
||
|
POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}s"
|
||
|
shift; continue;
|
||
|
fi
|
||
|
if [[ "$1" = "-n" ]]; then
|
||
|
UPDATE_ARGS="${UPDATE_ARGS} $1"
|
||
|
POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}n"
|
||
|
shift; continue;
|
||
|
fi
|
||
|
if [[ "$1" = "-p" ]]; then
|
||
|
UPDATE_ARGS="${UPDATE_ARGS} $1"
|
||
|
POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}p"
|
||
|
shift; continue;
|
||
|
fi
|
||
|
if [[ "$1" = "-c" ]]; then
|
||
|
UPDATE_ARGS="${UPDATE_ARGS} $1"
|
||
|
POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}c"
|
||
|
shift; continue;
|
||
|
fi
|
||
|
if [[ "$1" = "-f" ]]; then
|
||
|
FORCE_UPDATE="yes"
|
||
|
shift; continue;
|
||
|
fi
|
||
|
|
||
|
if [[ $(expr "$1" : '^linux-') -eq 6 ]]; then
|
||
|
TARGET_BRANCH="$1"
|
||
|
shift; continue;
|
||
|
fi
|
||
|
|
||
|
echo -e "Unexpected argument passed: ${RED}${1}${NORMAL}"
|
||
|
usage $0
|
||
|
exit
|
||
|
done
|
||
|
|
||
|
function check_for_updates()
|
||
|
{
|
||
|
case $TARGET_BRANCH in
|
||
|
"master") # Preparing a new stable compat-wireless release based on an RC kernel
|
||
|
git checkout -f
|
||
|
git fetch
|
||
|
git reset --hard origin
|
||
|
;;
|
||
|
*) # Based on a stable 2.6.x.y release, lets just move to the target branch
|
||
|
# we'll only ask for object updates if and only if you asked us to with -f,
|
||
|
# otherwise we eat up whatever you already have on your existing branch.
|
||
|
git checkout -f
|
||
|
git fetch
|
||
|
git branch -D $TARGET_BRANCH
|
||
|
git checkout -b $TARGET_BRANCH origin/$TARGET_BRANCH
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
# We will not update your linux-2.6-allstable git tree by default. You can force
|
||
|
# an update by two methods:
|
||
|
#
|
||
|
# a) Specifying a different target branch
|
||
|
# b) Specifying the -f flag to this script
|
||
|
if [[ "$FORCE_UPDATE" = "yes" || "$TARGET_BRANCH" != "$EXISTING_BRANCH" ]]; then
|
||
|
check_for_updates
|
||
|
else
|
||
|
echo -e "Skipping $ALL_STABLE_TREE git tree update checks for branch: $TARGET_BRANCH"
|
||
|
fi
|
||
|
|
||
|
echo "On $ALL_STABLE_TREE: $TARGET_BRANCH"
|
||
|
|
||
|
# At this point your linux-2.6-allstable tree should be up to date
|
||
|
# with the target kernel you want to use. Lets now make sure you are
|
||
|
# on matching compat-wireless branch.
|
||
|
|
||
|
# This is a super hack, but let me know if you figure out a cleaner way
|
||
|
TARGET_KERNEL_RELEASE=$(make VERSION="linux-3" SUBLEVEL="" EXTRAVERSION=".y" kernelversion)
|
||
|
|
||
|
if [[ $COMPAT_WIRELESS_BRANCH != $TARGET_KERNEL_RELEASE ]]; then
|
||
|
echo -e "You are on the compat-wireless ${GREEN}${COMPAT_WIRELESS_BRANCH}${NORMAL} but are "
|
||
|
echo -en "on the ${RED}${TARGET_KERNEL_RELEASE}${NORMAL} branch... "
|
||
|
echo -e "try changing to that first."
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
|
||
|
cd $COMPAT_WIRELESS_DIR
|
||
|
RELEASE=$(git describe --abbrev=0 | sed -e 's/v//g')
|
||
|
if [[ $POSTFIX_RELEASE_TAG != "-" ]]; then
|
||
|
RELEASE="${RELEASE}${POSTFIX_RELEASE_TAG}"
|
||
|
fi
|
||
|
RELEASE_TAR="$RELEASE.tar.bz2"
|
||
|
|
||
|
rm -rf $STAGING
|
||
|
mkdir -p $STAGING
|
||
|
cp -a $COMPAT_WIRELESS_DIR $STAGING/$RELEASE
|
||
|
cd $STAGING/$RELEASE
|
||
|
|
||
|
./scripts/admin-update.sh $UPDATE_ARGS
|
||
|
rm -rf $STAGING/$RELEASE/.git
|
||
|
|
||
|
# Remove any gunk
|
||
|
echo
|
||
|
echo "Cleaning up the release ..."
|
||
|
make clean 2>&1 > /dev/null
|
||
|
find ./ -type f -name *.orig | xargs rm -f
|
||
|
find ./ -type f -name *.rej | xargs rm -f
|
||
|
|
||
|
cd $STAGING/
|
||
|
|
||
|
echo "Creating $RELEASE_TAR ..."
|
||
|
tar -jcf $RELEASE_TAR $RELEASE/
|
||
|
|
||
|
echo
|
||
|
echo "Compat-wireles release: $RELEASE"
|
||
|
echo "Size: $(du -h $RELEASE_TAR)"
|
||
|
echo "sha1sum: $(sha1sum $RELEASE_TAR)"
|
||
|
echo
|
||
|
echo "Release: ${STAGING}$RELEASE_TAR"
|