Add a nice workflow for adding a patch or two to an osc branch of the
kernel.
# osc branch openSUSE:11.3/kernel-source
# osc co home:philipsb:branches:openSUSE:11.3:Update:Test/kernel-source
# mv ~/linux-2.6/driver-fix-for-something.patch .
# echo -e "\tpatches.drivers/driver-fix-for-something.patch" >> series.conf
# ./log.sh
# osc commit
Signed-off-by: Brandon Philips
---
rpm/log.sh | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 167 insertions(+), 0 deletions(-)
create mode 100755 rpm/log.sh
diff --git a/rpm/log.sh b/rpm/log.sh
new file mode 100755
index 0000000..c4fba7e
--- /dev/null
+++ b/rpm/log.sh
@@ -0,0 +1,167 @@
+#! /bin/sh
+
+# log.sh - Automate insertion of patches into a kernel rpm tree managed
+# with series.conf
+#
+# Usage example:
+#
+# osc branch openSUSE:11.3/kernel-source
+# osc co home:philipsb:branches:openSUSE:11.3:Update:Test/kernel-source
+# mv ~/linux-2.6/driver-fix-for-something.patch .
+# echo -e "\tpatches.drivers/driver-fix-for-something.patch" >> series.conf
+# ./log.sh
+# osc commit
+
+#############################################################################
+# Copyright (c) 2004-2006,2008-2010 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
+#############################################################################
+
+# Construct a changes entry and commit log from a patch.
+
+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%.}
+
+ set -- $(formail -c -x References -x Reference < "$patch")
+ references="$*"
+}
+
+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:+.}"
+}
+
+find_patches() {
+ osc diff series.conf \
+ | sed -n "s/^+\s*\(patches.*\)/\1/p"
+}
+
+for file in "$@" $(find_patches); do
+ dirname=$(dirname $file)
+ basename=$(basename $file)
+ archive=$dirname.tar.bz2
+
+ if [ ! -f $basename ]; then
+ echo "ERROR: $basename added to series.conf but doesn't exist in $PWD"
+ exit 1
+ fi
+
+ if [ ! -d $dirname ]; then
+ tar xvf $archive
+ fi
+
+ mv $basename $dirname
+ rm $archive
+ tar cfj $archive $dirname
+
+ 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 osc vc $CHANGES $message; then
+ entry=$(sed -ne '1,2d' -e '/^--*$/!p' -e '/^--*$/q' $CHANGES)
+ entry=${entry##$'\n'}
+ entry=${entry%%$'\n'}
+fi
+
+for c in ls *.changes; do
+ [ $c = $CHANGES ] && continue
+ cp $CHANGES $c
+done
--
1.7.1
--
To unsubscribe, e-mail: opensuse-kernel+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-kernel+help@opensuse.org