#!/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