diff options
Diffstat (limited to 'debian/gen-patchlevel')
-rwxr-xr-x | debian/gen-patchlevel | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/debian/gen-patchlevel b/debian/gen-patchlevel new file mode 100755 index 0000000..5aa547c --- /dev/null +++ b/debian/gen-patchlevel @@ -0,0 +1,86 @@ +#!/bin/sh +set -e + +# Copyright 2011 Niko Tyni +# +# This program is free software; you can redistribute it and/or modify +# it under the same terms as Perl itself. +# +# Given a list of patches in debian/patches, write out one line +# per patch containing the patch description, bug pointers and +# upstream commit information where available. +# +# The output format is designed to be included into Perl's patchlevel.h, +# which eventually controls what 'perl -V' prints. +# +# When called with the '-d' option, outputs the timestamp of the newest +# patch, for the purposes of getting $patchlevel_date in perlbug right + +prefix="DEBPKG:" +version="" +patchdir=debian/patches +showdate=false + +while getopts p:v:d f +do + case $f in + p) prefix=$OPTARG;; + v) version=$OPTARG;; + d) showdate=true + esac +done +shift `expr $OPTIND - 1` + +in=${1:-$patchdir/series} + +if [ -n "$version" ]; then + version=" for $version" +fi + +newest_mtime=0 +while read patch strip +do + if $showdate; then + mtime=$(stat --format='%Y' $patchdir/$patch) + if [ "$mtime" -gt "$newest_mtime" ]; then + newest_mtime="$mtime" + fi + continue + fi + + patchname=$(echo $patch | sed 's/\.diff$//') + < $patchdir/$patch sed -e '/^Subject:/ { N; s/\n / / }' | sed -n -e ' + + # massage the patch headers + s|^Bug: .*https\?://rt\.perl\.org/.*id=\(.*\).*|[perl #\1]|; tprepend; + s|^Bug: .*https\?://rt\.cpan\.org/.*id=\(.*\).*|[rt.cpan.org #\1]|; tprepend; + s|^Bug-Debian: [^0-9]*\([0-9]\{5,\}\)|https://bugs.debian.org/\1|; tprepend; + s/^\(Subject\|Description\): //; tappend; + s|^Origin: .*https\?://perl5\.git\.perl\.org/perl\.git/commit\(diff\)\?/\(.......\).*|[\2]|; tprepend; + + # post-process at the end of input + $ { x; + # include the version number in the patchlevel.h description (if available) + s/List packaged patches/&'"${version}"'/; + + # escape any backslashes and double quotes + s|\\|\\\\|g; s|"|\\"|g; + + # add a prefix + s|^|\t,"'"$prefix$patchname"' - |; + # newlines away + s/\n/ /g; s/ */ /g; + # add a suffix + s/ *$/"/; p + }; + # stop all processing + d; + # label: append to the hold space + :append H; d; + # label: prepend to the hold space + :prepend x; H; d; + ' +done < $in +if $showdate; then + echo $newest_mtime +fi |