summaryrefslogtreecommitdiffstats
path: root/quilt
diff options
context:
space:
mode:
authorAndreas Gruenbacher <agruen@suse.de>2005-07-18 14:55:03 +0000
committerAndreas Gruenbacher <agruen@suse.de>2005-07-18 14:55:03 +0000
commit28be8101d1775667e0d7b3bd297b0f7b28570763 (patch)
treed77c7642714d81e92cebf7981fdd53b7f36cb9ef /quilt
parent78a7ca38e25c940f034c1cc95a510bfd31a92f47 (diff)
downloadquilt-28be8101d1775667e0d7b3bd297b0f7b28570763.tar.gz
- Based on work done by several contributers, add a headerv0.41
command. - Bump version to 0.41.
Diffstat (limited to 'quilt')
-rw-r--r--quilt/header.in204
-rw-r--r--quilt/refresh.in6
2 files changed, 207 insertions, 3 deletions
diff --git a/quilt/header.in b/quilt/header.in
new file mode 100644
index 0000000..f136d34
--- /dev/null
+++ b/quilt/header.in
@@ -0,0 +1,204 @@
+#! @BASH@
+
+# This script is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+ if ! [ -r @SCRIPTS@/patchfns ]
+ then
+ echo "Cannot read library @SCRIPTS@/patchfns" >&2
+ exit 1
+ fi
+ . @SCRIPTS@/patchfns
+fi
+
+: ${EDITOR:=vi}
+
+usage()
+{
+ printf $"Usage: quilt header [-a|-r|-e] [--backup] [--strip-diffstat] [--strip-trailing-whitespace] [patch]\n"
+
+ if [ x$1 = x-h ]
+ then
+ printf $"
+Print or change the header of the topmost or specified patch.
+
+-a, -r, -e
+ Append to (-a) or replace (-r) the exiting patch header, or
+ edit (-e) the header in \$EDITOR (%s). If none of these options is
+ given, print the patch header.
+
+--strip-diffstat
+ Strip diffstat output from the header.
+
+--strip-trailing-whitespace
+ Strip trailing whitespace at the end of lines of the header.
+
+--backup
+ Create a backup copy of the old version of a patch as patch~.
+" "$EDITOR"
+ exit 0
+ else
+ exit 1
+ fi
+}
+
+maybe_strip_trailing_whitespace()
+{
+ if [ -n "$opt_strip_trailing_whitespace" ]
+ then
+ @SED@ -e 's:[ '$'\t'']*$::'
+ else
+ cat
+ fi
+}
+
+maybe_strip_diffstat()
+{
+ if [ -n "$opt_strip_diffstat" ]
+ then
+ @AWK@ '
+ /#? .* \| / \
+ { eat = eat $0 "\n"
+ next }
+ /^#? .* files? changed(, .* insertions?\(\+\))?(, .* deletions?\(-\))?/ \
+ { eat = ""
+ next }
+ { print eat $0
+ eat = "" }
+ '
+ else
+ cat
+ fi
+}
+
+options=`getopt -o areh --long backup,strip-trailing-whitespace,strip-diffstat -- "$@"`
+
+if [ $? -ne 0 ]
+then
+ usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+ case "$1" in
+ -a)
+ opt_append=1
+ shift ;;
+ -r)
+ opt_replace=1
+ shift ;;
+ -e)
+ opt_edit=1
+ shift ;;
+ --backup)
+ QUILT_BACKUP=1
+ shift ;;
+ --strip-diffstat)
+ opt_strip_diffstat=1
+ shift ;;
+ --strip-trailing-whitespace)
+ opt_strip_trailing_whitespace=1
+ shift ;;
+ -h)
+ usage -h ;;
+ --)
+ shift
+ break ;;
+ esac
+done
+
+case "$opt_append$opt_replace$opt_edit"
+in
+''|1) ;;
+*) usage ;;
+esac
+
+if [ $# -gt 1 ]
+then
+ usage
+fi
+
+[ $# -eq 1 ] && opt_patch=$1
+
+if [ -n "$opt_patch" ]
+then
+ if ! patch=$(find_patch "$opt_patch")
+ then
+ printf $"Patch %s is not in series\n" "$opt_patch" >&2
+ exit 1
+ fi
+else
+ patch=$(top_patch)
+ if [ -z "$patch" ]
+ then
+ printf $"No patches applied\n" >&2
+ exit 1
+ fi
+fi
+
+patch_file=$(patch_file_name $patch)
+
+if [ -z "$opt_replace" -a -z "$opt_append" -a -z "$opt_edit" ]
+then
+ [ -e "$patch_file" ] || exit 0
+
+ cat_file "$patch_file" \
+ | patch_header \
+ | maybe_strip_diffstat \
+ | maybe_strip_trailing_whitespace
+else
+ patch_file_or_null=/dev/null
+ [ -e "$patch_file" ] && patch_file_or_null=$patch_file
+
+ tmp=$(gen_tempfile) || exit 1
+ tmp2=$(gen_tempfile) || exit 1
+ trap "rm -f $tmp $tmp2" EXIT
+
+ ( if [ -z "$opt_replace" ]
+ then
+ cat_file $patch_file_or_null | patch_header
+ fi
+ if [ -n "$opt_append" -o -n "$opt_replace" ]
+ then
+ cat
+ fi
+ ) > $tmp
+
+ if [ -n "$opt_edit" ]
+ then
+ $EDITOR "$tmp" || exit 1
+ fi
+
+ maybe_strip_diffstat < $tmp \
+ | maybe_strip_trailing_whitespace > $tmp2
+
+ cat_file "$patch_file_or_null" | patch_body >> $tmp2 || exit 1
+
+ if ( [ -z "$QUILT_BACKUP" -o ! -e $patch_file ] || \
+ mv $patch_file $patch_file~ ) && \
+ cat_to_new_file $patch_file < $tmp2
+ then
+ if [ -z "$opt_append" ]
+ then
+ printf \
+$"Replaced header of patch %s\n" "$(print_patch $patch)"
+ else
+ printf \
+$"Appended text to header of patch %s\n" "$(print_patch $patch)"
+ fi
+ else
+ exit 1
+ fi
+fi
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh
diff --git a/quilt/refresh.in b/quilt/refresh.in
index c3a7fc9..058dcc0 100644
--- a/quilt/refresh.in
+++ b/quilt/refresh.in
@@ -247,7 +247,7 @@ fi
mkdir -p $(dirname $patch_file)
-if ! cat_file $patch_file | patch_description > $tmp_header
+if ! cat_file $patch_file | patch_header > $tmp_header
then
die 1
fi
@@ -268,9 +268,9 @@ then
if (index($0, "#") == 1)
prefix="#"
}
- /.*\|.*/ { eat = eat $0 "\n"
+ /^#? .* \| / { eat = eat $0 "\n"
next }
- /.* files? changed(, .* insertions?\(\+\))?(, .* deletions?\(-\))?/ \
+ /^#? .* files? changed(, .* insertions?\(\+\))?(, .* deletions?\(-\))?/ \
{ print_diffstat()
diffstat = "" ; eat = ""
next }