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