| #!/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 |