|
Matthias Brugger |
c8a553 |
#! /bin/bash
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
# log.sh - Automate insertion of patches into a kernel rpm tree managed
|
|
Brandon Philips |
644fec |
# with series.conf
|
|
Brandon Philips |
644fec |
#
|
|
Brandon Philips |
644fec |
# Usage example:
|
|
Brandon Philips |
644fec |
#
|
|
Brandon Philips |
644fec |
# osc branch openSUSE:11.3/kernel-source
|
|
Brandon Philips |
644fec |
# osc co home:philipsb:branches:openSUSE:11.3:Update:Test/kernel-source
|
|
Brandon Philips |
644fec |
# mv ~/linux-2.6/driver-fix-for-something.patch .
|
|
Brandon Philips |
644fec |
# echo -e "\tpatches.drivers/driver-fix-for-something.patch" >> series.conf
|
|
Brandon Philips |
644fec |
# ./log.sh
|
|
Brandon Philips |
644fec |
# osc commit
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
#############################################################################
|
|
Brandon Philips |
644fec |
# Copyright (c) 2004-2006,2008-2010 Novell, Inc.
|
|
Brandon Philips |
644fec |
# All Rights Reserved.
|
|
Brandon Philips |
644fec |
#
|
|
Brandon Philips |
644fec |
# This program is free software; you can redistribute it and/or
|
|
Brandon Philips |
644fec |
# modify it under the terms of version 2 of the GNU General Public License as
|
|
Brandon Philips |
644fec |
# published by the Free Software Foundation.
|
|
Brandon Philips |
644fec |
#
|
|
Brandon Philips |
644fec |
# This program is distributed in the hope that it will be useful,
|
|
Brandon Philips |
644fec |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Brandon Philips |
644fec |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Brandon Philips |
644fec |
# GNU General Public License for more details.
|
|
Brandon Philips |
644fec |
#
|
|
Brandon Philips |
644fec |
# You should have received a copy of the GNU General Public License
|
|
Brandon Philips |
644fec |
# along with this program; if not, contact Novell, Inc.
|
|
Brandon Philips |
644fec |
#
|
|
Brandon Philips |
644fec |
# To contact Novell about this file by physical or electronic mail,
|
|
Brandon Philips |
644fec |
# you may find current contact information at www.novell.com
|
|
Brandon Philips |
644fec |
#############################################################################
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
# Construct a changes entry and commit log from a patch.
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
CHANGES=kernel-source.changes
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
trap 'rm -rf "$tmpdir"' EXIT
|
|
Brandon Philips |
644fec |
tmpdir=$(mktemp -d /tmp/${0##*/}.XXXXXX)
|
|
Brandon Philips |
644fec |
message=$tmpdir/message
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
log_entry() {
|
|
Brandon Philips |
644fec |
local entry=$1
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
echo "$entry" \
|
|
Brandon Philips |
644fec |
| fmt --width 65 \
|
|
Brandon Philips |
644fec |
| sed -e '1s/^/- /' -e '2,$s/^/ /' \
|
|
Brandon Philips |
644fec |
>> $message
|
|
Brandon Philips |
644fec |
}
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
patch_meta() {
|
|
Brandon Philips |
644fec |
local patch=$1
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
subject=$(formail -c -x Subject < "$patch" \
|
|
Brandon Philips |
644fec |
| sed -e 's, *\[[#/ A-Za-z0-9-]*\],,')
|
|
Brandon Philips |
644fec |
subject=${subject## }
|
|
Brandon Philips |
644fec |
subject=${subject%.}
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
set -- $(formail -c -x References -x Reference < "$patch")
|
|
Brandon Philips |
644fec |
references="$*"
|
|
Brandon Philips |
644fec |
}
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
patch_log_entry() {
|
|
Brandon Philips |
644fec |
local patch=$1 subject references old_subj old_ref old_patch="$tmpdir/old"
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
git show "HEAD:$patch" >"$old_patch" 2>/dev/null
|
|
Brandon Philips |
644fec |
patch_meta "$old_patch"
|
|
Brandon Philips |
644fec |
old_subj="$subject"
|
|
Brandon Philips |
644fec |
old_ref="$references"
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
patch_meta "$patch"
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
local msg
|
|
Brandon Philips |
644fec |
if test -z "$subject" -o "$subject" != "$old_subj"; then
|
|
Brandon Philips |
644fec |
msg="$subject${references:+ ($references)}"
|
|
Brandon Philips |
644fec |
elif test "$references" != "$old_ref"; then
|
|
Brandon Philips |
644fec |
if test -n "$references"; then
|
|
Brandon Philips |
644fec |
msg="Update references ($references)"
|
|
Brandon Philips |
644fec |
fi
|
|
Brandon Philips |
644fec |
else
|
|
Brandon Philips |
644fec |
msg="Refresh"
|
|
Brandon Philips |
644fec |
fi
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
log_entry "$patch: $msg${msg:+.}"
|
|
Brandon Philips |
644fec |
}
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
find_patches() {
|
|
Brandon Philips |
644fec |
osc diff series.conf \
|
|
Brandon Philips |
644fec |
| sed -n "s/^+\s*\(patches.*\)/\1/p"
|
|
Brandon Philips |
644fec |
}
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
for file in "$@" $(find_patches); do
|
|
Brandon Philips |
644fec |
dirname=$(dirname $file)
|
|
Brandon Philips |
644fec |
basename=$(basename $file)
|
|
Brandon Philips |
644fec |
archive=$dirname.tar.bz2
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
if [ ! -f $basename ]; then
|
|
Brandon Philips |
644fec |
echo "ERROR: $basename added to series.conf but doesn't exist in $PWD"
|
|
Brandon Philips |
644fec |
exit 1
|
|
Brandon Philips |
644fec |
fi
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
if [ ! -d $dirname ]; then
|
|
Brandon Philips |
644fec |
tar xvf $archive
|
|
Brandon Philips |
644fec |
fi
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
mv $basename $dirname
|
|
Brandon Philips |
644fec |
rm $archive
|
|
Brandon Philips |
644fec |
tar cfj $archive $dirname
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
files[${#files[@]}]=$file
|
|
Brandon Philips |
644fec |
done
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
if [ ${#files[@]} -eq 0 ]; then
|
|
Brandon Philips |
644fec |
echo "No modified files" >&2
|
|
Brandon Philips |
644fec |
exit 1
|
|
Brandon Philips |
644fec |
fi
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
for file in "${files[@]}"; do
|
|
Brandon Philips |
644fec |
if [ "${file:0:1}" = - ]; then
|
|
Brandon Philips |
644fec |
log_entry "${file:1}: Delete."
|
|
Brandon Philips |
644fec |
else
|
|
Brandon Philips |
644fec |
case "$file" in
|
|
Brandon Philips |
644fec |
config/*)
|
|
Brandon Philips |
644fec |
if [ -z "$configs_updated" ]; then
|
|
Brandon Philips |
644fec |
log_entry "Update config files."
|
|
Brandon Philips |
644fec |
configs_updated=1
|
|
Brandon Philips |
644fec |
fi
|
|
Brandon Philips |
644fec |
;;
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
patches.*)
|
|
Brandon Philips |
644fec |
patch_log_entry "$file"
|
|
Brandon Philips |
644fec |
;;
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
kabi/*/symvers-* | kabi/*/symtypes-* | kabi/*/symsets-* )
|
|
Brandon Philips |
644fec |
if [ -z "$symvers_updated" ]; then
|
|
Brandon Philips |
644fec |
log_entry "Update reference module symbol versions."
|
|
Brandon Philips |
644fec |
symvers_updated=1
|
|
Brandon Philips |
644fec |
fi
|
|
Brandon Philips |
644fec |
;;
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
series.conf)
|
|
Brandon Philips |
644fec |
# don't log changes in there
|
|
Brandon Philips |
644fec |
;;
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
*)
|
|
Brandon Philips |
644fec |
log_entry "$file: "
|
|
Brandon Philips |
644fec |
;;
|
|
Brandon Philips |
644fec |
esac
|
|
Brandon Philips |
644fec |
fi
|
|
Brandon Philips |
644fec |
done
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
if [ ! -s $message ]; then
|
|
Brandon Philips |
644fec |
echo "- " >> $message
|
|
Brandon Philips |
644fec |
fi
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
if osc vc $CHANGES $message; then
|
|
Brandon Philips |
644fec |
entry=$(sed -ne '1,2d' -e '/^--*$/!p' -e '/^--*$/q' $CHANGES)
|
|
Brandon Philips |
644fec |
entry=${entry##$'\n'}
|
|
Brandon Philips |
644fec |
entry=${entry%%$'\n'}
|
|
Brandon Philips |
644fec |
fi
|
|
Brandon Philips |
644fec |
|
|
Brandon Philips |
644fec |
for c in *.changes; do
|
|
Brandon Philips |
644fec |
[ $c = $CHANGES ] && continue
|
|
Brandon Philips |
644fec |
cp $CHANGES $c
|
|
Brandon Philips |
644fec |
done
|