#!/bin/bash -eu if [ $# -ne 2 ]; then echo >&2 "Usage: $0 REPO VERSION" echo >&2 "REPO is the git repository to generate a changelog from" echo >&2 "VERSION is the stable version (without leading v)" exit 2 fi # Get base version, i.e. the Linus stable release that a version is based on base_version() { local ver ver="${1%-rc*}" case "$ver" in 2.6.*.* | [3-9].*.* | ??.*.*) ver="${ver%.*}" ;; esac echo "$ver" } add_update() { local base update base="$(base_version "$1")" update="${1#$base.}" if [ "$update" = "$1" ]; then update=0 fi update="$((update + $2))" if [ $update = 0 ]; then echo "$base" else echo "$base.$update" fi } # Get next stable update version next_update() { add_update "$1" 1 } export GIT_DIR="$1/.git" new_ver="$2" cur_pkg_ver="$(dpkg-parsechangelog | sed -n 's/^Version: //p')" cur_ver="${cur_pkg_ver%-*}" if [ "$(base_version "$new_ver")" != "$(base_version "$cur_ver")" ]; then echo >&2 "$new_ver is not on the same stable series as $cur_ver" exit 2 fi case "$cur_pkg_ver" in *~experimental*) new_pkg_ver="$new_ver-1~experimental.1" ;; *) new_pkg_ver="$new_ver-1" ;; esac # dch insists on word-wrapping everything, so just add the URLs initially dch -v "$new_pkg_ver" --preserve --multimaint-merge -D UNRELEASED \ --release-heuristic=changelog "$( echo "New upstream stable update: " while [ "v$cur_ver" != "v$new_ver" ]; do cur_ver="$(next_update "$cur_ver")" echo "http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-$cur_ver" done)" # Then insert the shortlogs with sed while [ "v$cur_ver" != "v$new_ver" ]; do next_ver="$(next_update "$cur_ver")" sed -i '/ChangeLog-'"${next_ver//./\\.}"'/a\ '"$(git log --reverse --pretty=' - %s\' "v$cur_ver..v$next_ver^")"' ' debian/changelog cur_ver="$next_ver" done