Jeff Mahoney 9663dc
#! /bin/bash
Benjamin Poirier 775690
# vim: et:sts=4:sw=4
Michal Marek 8f13a0
Michal Marek 0a417c
#############################################################################
Michal Marek 0a417c
# Copyright (c) 2004-2006,2008,2009 Novell, Inc.
Michal Marek 0a417c
# All Rights Reserved.
Michal Marek 0a417c
#
Michal Marek 0a417c
# This program is free software; you can redistribute it and/or
Michal Marek 0a417c
# modify it under the terms of version 2 of the GNU General Public License as
Michal Marek 0a417c
# published by the Free Software Foundation.
Michal Marek 0a417c
#
Michal Marek 0a417c
# This program is distributed in the hope that it will be useful,
Michal Marek 0a417c
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Michal Marek 0a417c
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   See the
Michal Marek 0a417c
# GNU General Public License for more details.
Michal Marek 0a417c
#
Michal Marek 0a417c
# You should have received a copy of the GNU General Public License
Michal Marek 0a417c
# along with this program; if not, contact Novell, Inc.
Michal Marek 0a417c
#
Michal Marek 0a417c
# To contact Novell about this file by physical or electronic mail,
Michal Marek 0a417c
# you may find current contact information at www.novell.com
Michal Marek 0a417c
#############################################################################
Michal Marek 0a417c
Michal Marek 3756dc
if test -x "${0}2" -a ! -e kernel-source.changes; then
Michal Marek 7f1bb6
	# hand over to scripts/log2
Michal Marek 7f1bb6
	exec "${0}2" "$@"
Michal Marek 7f1bb6
fi
Michal Marek 7f1bb6
Michal Marek 8f13a0
# Construct a changes entry and commit log from a patch.
Michal Marek 8f13a0
Michal Marek 8f13a0
. ${0%/*}/wd-functions.sh
Michal Marek 8f13a0
Michal Marek 8f13a0
if ! $using_git; then
Michal Marek 8f13a0
    echo "ERROR: not in a git working directory."
Michal Marek 8f13a0
    exit 1
Michal Marek 8f13a0
fi
Michal Marek 8f13a0
Michal Marek 8f13a0
scripts/check-cvs-add || exit 1
Michal Marek 8f13a0
Michal Marek 8f13a0
CHANGES=kernel-source.changes
Michal Marek 8f13a0
Michal Marek 975e43
trap 'rm -rf "$tmpdir"' EXIT
Michal Marek 975e43
tmpdir=$(mktemp -d /tmp/${0##*/}.XXXXXX)
Michal Marek 975e43
message=$tmpdir/message
Michal Marek 8f13a0
Michal Marek 8f13a0
log_entry() {
Michal Marek 8f13a0
    local entry=$1
Michal Marek 8f13a0
Michal Marek 8f13a0
    echo "$entry" \
Michal Marek 8f13a0
    | fmt --width 65 \
Michal Marek 8f13a0
    | sed -e '1s/^/- /' -e '2,$s/^/  /' \
Michal Marek 8f13a0
    >> $message
Michal Marek 8f13a0
}
Michal Marek 8f13a0
Michal Marek 975e43
patch_meta() {
Michal Marek 8f13a0
    local patch=$1
Michal Marek 8f13a0
Michal Marek 8f13a0
    subject=$(formail -c -x Subject < "$patch" \
Michal Marek 8f13a0
             | sed -e 's, *\[[#/ A-Za-z0-9-]*\],,')
Jeff Mahoney 7f09b5
    subject=${subject##:}
Michal Marek 8f13a0
    subject=${subject## }
Michal Marek 76da9b
    subject=${subject%.}
Michal Marek 8f13a0
Michal Marek 9289fd
    # allow one blank line before the References: header
Michal Marek 9289fd
    set -- $(awk '
Michal Marek 5f2c56
	/^References:/ { sub(/^References:/, ""); print; exit }
Michal Marek 9289fd
	/^$/ { if (++blank > 1) exit }' "$patch")
Michal Marek 7cdc50
    references="$*"
Michal Marek 890bb7
    case "$references" in
Michal Marek 890bb7
    None | none)
Michal Marek 890bb7
        references=
Michal Marek 890bb7
    esac
Michal Marek 975e43
}
Michal Marek 975e43
Michal Marek 975e43
patch_log_entry() {
Michal Marek 975e43
    local patch=$1 subject references old_subj old_ref old_patch="$tmpdir/old"
Michal Marek 975e43
Michal Marek d942fb
    git show "HEAD:$patch" >"$old_patch" 2>/dev/null
Michal Marek 975e43
    patch_meta "$old_patch"
Michal Marek 975e43
    old_subj="$subject"
Michal Marek 975e43
    old_ref="$references"
Michal Marek 975e43
Michal Marek 975e43
    patch_meta "$patch"
Michal Marek 975e43
Michal Marek 975e43
    local msg
Michal Marek 975e43
    if test -z "$subject" -o "$subject" != "$old_subj"; then
Michal Marek 975e43
        msg="$subject${references:+ ($references)}"
Michal Marek 975e43
    elif test "$references" != "$old_ref"; then
Michal Marek 975e43
        if test -n "$references"; then
Michal Marek 975e43
            msg="Update references ($references)"
Michal Marek 975e43
        fi
Michal Marek 975e43
    else
Michal Marek 975e43
        msg="Refresh"
Michal Marek 975e43
    fi
Michal Marek 8f13a0
Michal Marek 8f13a0
    log_entry "$patch: $msg${msg:+.}"
Michal Marek 8f13a0
}
Michal Marek 8f13a0
Michal Marek 8f13a0
for file in "$@" $(scripts/cvs-touched-files); do
Michal Marek 8f13a0
    [ "${file:(-8)}" = ".changes" ] && continue
Michal Marek 8f13a0
    files[${#files[@]}]=$file
Michal Marek 8f13a0
done
Michal Marek 8f13a0
Michal Marek 8f13a0
if [ ${#files[@]} -eq 0 ]; then
Michal Marek 8f13a0
    echo "No modified files" >&2
Michal Marek 8f13a0
    exit 1
Michal Marek 8f13a0
fi
Michal Marek 8f13a0
Michal Marek 8f13a0
for file in "${files[@]}"; do
Michal Marek 8f13a0
    if [ "${file:0:1}" = - ]; then
Michal Marek 8f13a0
	log_entry "${file:1}: Delete."
Michal Marek 8f13a0
    else
Michal Marek 8f13a0
	case "$file" in
Michal Marek 8f13a0
	    config/*)
Michal Marek 8f13a0
		if [ -z "$configs_updated" ]; then
Michal Marek 8f13a0
		    log_entry "Update config files."
Michal Marek 8f13a0
		    configs_updated=1
Michal Marek 8f13a0
		fi
Michal Marek 8f13a0
		;;
Michal Marek 8f13a0
		
Michal Marek 8f13a0
	    patches.*)
Michal Marek 8f13a0
		patch_log_entry "$file"
Michal Marek 8f13a0
		;;
Michal Marek 8f13a0
Michal Marek fd1cc8
	    kabi/*/symvers-* | kabi/*/symtypes-* | kabi/*/symsets-* )
Michal Marek 8f13a0
		if [ -z "$symvers_updated" ]; then
Michal Marek 8f13a0
		    log_entry "Update reference module symbol versions."
Michal Marek 8f13a0
		    symvers_updated=1
Michal Marek 8f13a0
		fi
Michal Marek 8f13a0
	    	;;
Michal Marek 8f13a0
Michal Marek 8f13a0
	    series.conf)
Michal Marek 8f13a0
		# don't log changes in there
Michal Marek 8f13a0
		;;
Michal Marek 8f13a0
Michal Marek 8f13a0
	    *)
Michal Marek 8f13a0
		log_entry "$file: "
Michal Marek 8f13a0
		;;
Michal Marek 8f13a0
	esac
Michal Marek 8f13a0
    fi
Michal Marek 8f13a0
done
Michal Marek 8f13a0
Michal Marek 8f13a0
if [ ! -s $message ]; then
Michal Marek 8f13a0
    echo "- " >> $message
Michal Marek 8f13a0
fi
Michal Marek 8f13a0
Michal Marek 8f13a0
if [ -z "$VC" ]; then
Michal Marek 8f13a0
    VC=vc
Michal Marek 8f13a0
    for search in $HOME/bin /work/src/bin scripts; do
Michal Marek 8f13a0
	if [ -x $search/$VC ]; then
Michal Marek 8f13a0
	    VC=$search/$VC
Michal Marek 8f13a0
	    break
Michal Marek 8f13a0
	fi
Michal Marek 8f13a0
    done
Michal Marek 8f13a0
fi
Michal Marek 8f13a0
Michal Marek 8f13a0
if $VC $CHANGES $message; then
Michal Marek 8f13a0
    entry=$(sed -ne '1,2d' -e '/^--*$/!p' -e '/^--*$/q' $CHANGES)
Michal Marek 8f13a0
    entry=${entry##$'\n'}
Michal Marek 8f13a0
    entry=${entry%%$'\n'}
Michal Marek 8f13a0
    echo "$entry" > $message
Michal Marek 8f13a0
Michal Marek 8f13a0
    while :; do
Michal Marek 8f13a0
	echo
Michal Marek 8f13a0
	sed -e 's:^:| :' $message
Michal Marek 8f13a0
	echo
Michal Marek 8f13a0
	echo -n "Commit with the above changelog entry: ([y]es), [n]o, [e]dit? "
Michal Marek 8f13a0
	read yesno && \
Michal Marek 8f13a0
	case "$yesno" in
Michal Marek 8f13a0
	    "" | [yY] | yes)
Michal Marek 8f13a0
                git add $CHANGES
Michal Marek 8f13a0
                # XXX don't commit -a?
Michal Marek 8f13a0
                git commit -a -F $message || exit
Michal Marek edfc6a
                branch=$(get_branch_name)
Michal Marek edfc6a
                case "$branch" in
Michal Marek b26b17
                master | stable | vanilla | linux-next | openSUSE-??.? | \
Matthias Brugger fa0677
                SLE?? | SLE*-ARM | SLE??-SP? | SLE*-RT | SLE*-TD | SLE*-LTSS | \
Matthias Brugger fa0677
                cve/linux-* | packaging | scripts)
Benjamin Poirier 775690
                    remote=$(get_git_remote "$branch")
Benjamin Poirier 775690
                    user=$(get_git_user "$remote")
Michal Marek edfc6a
                    echo "after testing your changes, run"
Benjamin Poirier 775690
                    echo "    git push $remote HEAD:users/$user/$branch/for-next"
Michal Marek edfc6a
                esac
Michal Marek 8f13a0
		break ;;
Michal Marek 8f13a0
	    [nN] | no)
Michal Marek 8f13a0
		break ;;
Michal Marek 8f13a0
	    [eE] | edit)
Michal Marek 8f13a0
		${EDITOR:-vi} $message
Michal Marek 8f13a0
		;;
Michal Marek 8f13a0
	esac
Michal Marek 8f13a0
    done
Michal Marek 8f13a0
fi