blob: eb9461a4f85acfe6ab73128c81fe13393b3034a0 [file] [log] [blame]
#!/bin/bash -eu
. "$(dirname "$0")"/lsq-defs
do_release=true
if [ $# -ge 1 ] && [ "$1" = --rc ]; then
do_release=false
fi
full_version="$(make kernelversion)"
base_ver="$(base_version "$full_version")"
release_branch_name=linux-$base_ver.y
if ! git diff --quiet HEAD $release_branch_name; then
echo >&2 "E: Head doesn't match branch $release_branch_name"
exit 1
fi
# Stash away changes applied through quilt
git add -f .pc
git stash save "quilted working tree for $full_version"
revert_worktree() {
{
git checkout -f $release_branch_name
git stash pop
git reset .pc
} >/dev/null
}
if $do_release; then
branch_name=$release_branch_name
git checkout $branch_name
else
branch_name=$release_branch_name-rc
git checkout -B $branch_name
fi
# Re-apply them through git
git quiltimport --patches "$(get_queue $base_ver)"
if $do_release; then
full_version="$(next_update $(make kernelversion))"
else
: # stick with the version we got from the updated tree
fi
old_IFS="$IFS"
IFS=.-
set -- $full_version
IFS="$old_IFS"
sed -i "s/^SUBLEVEL =.*/SUBLEVEL = $3/; s/^EXTRAVERSION =.*/EXTRAVERSION =${4:+ -$4}/" Makefile
git commit -m "Linux $full_version" Makefile
# Check for unexpected changes
# XXX I want to filter out the version change here and then automatically fail
# if there's anything else, but can't work out how to do that yet.
echo "Changes from previous working tree:"
git diff stash@{0} HEAD | filterdiff -p1 -x '.pc/*' --clean
read -p "All good? " </dev/tty
case "$REPLY" in
y|yes)
if $do_release; then
git stash drop
fi
;;
*)
echo Reverting...
revert_worktree
exit 1
;;
esac
if $do_release; then
git tag -s -m "This is the $full_version stable release" v$full_version
git branch -D $branch_name-rc
queue="$(get_queue $base_ver)"
cd "$(dirname "$queue")"
git mv "$(basename "$queue")" releases/$full_version
git commit -m "Release $full_version"
else
revert_worktree
fi