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