case $CONFIG in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; elif test -f ../../config.sh; then TOP=../..; elif test -f ../../../config.sh; then TOP=../../..; elif test -f ../../../../config.sh; then TOP=../../../..; else echo "Can't find config.sh."; exit 1 fi . $TOP/config.sh ;; esac case "$0" in */*) cd `expr X$0 : 'X\(.*\)/'` ;; esac echo "Extracting pat/patnotify (with variable substitutions)" cat >patnotify <>patnotify <<'!NO!SUBS!' $progname = &profile; # Read ~/.dist_profile require 'getopts.pl'; &usage unless &Getopts("hquV"); if ($opt_V) { print STDERR "$progname $version PL$patchlevel\n"; exit 0; } elsif ($opt_h) { &usage; } chdir '..' if -d '../bugs'; &readpackage; &readusers if $opt_u; $dest = join(' ', @ARGV); $dest .= " $notify" if $opt_u; &usage unless $dest; # Offer to edit the address list unless -q unless ($opt_q) { select((select(STDOUT), $| = 1)[0]); print "Do you wish to edit the address list? [y] "; $ans = ; unless ($ans =~ /^n/i) { @to = split(' ', $dest); &listedit(*to); $dest = join(' ', @to); } } if (-f 'patchlevel.h') { open(PL,"patchlevel.h") || die "$progname: can't open patchlevel.h: $!\n"; while () { if (/^#define\s+PATCHLEVEL\s+(\d+)/) { $last = $1; } } die "$progname: malformed patchlevel.h file.\n" if $last eq ''; } else { die "$progname: no patchlevel.h.\n"; } @patches = &patseq($last); # Compute patches sequence $lastpat = pop(@patches); warn "$progname: missing last .logs and .mods files\n" if $lastpat eq ''; $missing = $last - $lastpat + 1; $these = $missing == 1 ? 'this' : 'these'; $patches = $missing == 1 ? 'patch' : 'patches'; $through = $missing == 1 ? $lastpat : "$lastpat thru " . ($lastpat+$missing-1); $have = $missing == 1 ? 'has' : 'have'; $patlist = "$lastpat-"; # They'll get everything up to the end ($Patches = $patches) =~ s/^p/P/; $opt = ($mailer =~ /sendmail/) ? '-odq' : ''; chdir 'bugs' || die "$progname: can't cd to bugs: $!\n"; # Find out priority of last patch set $priority = 'UNKNOWN'; open(PATCH, "patch$lastpat") || die "$progname: can't open patch #$lastpat: $!\n"; while () { /^Priority:\s*(\S+)\s*$/ && ($priority = $1); } close PATCH; # Look for the .clog description and prepare the patch description # for inclusion in the notification, so that they can figure out whether # they really need that patch set. if (-f ".clog$lastpat") { open(LOGS, ".clog$lastpat") || die "$progname: can't open .clog$lastpat: $!\n"; $_ = . . ; # Skip first three lines $clog = ''; while () { $clog .= $_; } close LOGS; } else { warn "$progname: missing last .clog file in bugs directory\n"; } print "$progname: sending notification of $missing new $patches to $dest...\n"; fork && exit; # I hate broken mailers! Bust it up into smaller groups of people... @dest = split(' ', $dest); while (@smalldest = splice(@dest, 0, 50)) { $to = join(', ', @smalldest); # Sensible To: for sendmail $smalldest = join(' ', @smalldest); open(MAILER, "|$mailer $opt $smalldest") || die "$progname: can't fork $mailer: $!\n"; print MAILER "To: $to Subject: $Patches $through for $package version $baserev $have been released. Precedence: bulk X-Mailer: dist [version $version PL$patchlevel] This is just a quick note to let you know that $package version $baserev has been recently upgraded and that $patches $through $have been released. If you are actively using $package, I strongly suggest you upgrade by applying $these $patches, whose priority is $priority. You can fetch $these $patches automatically by sending me the following mail: Subject: Command \@SH mailpatch - $package $baserev $patlist ^ note the c And if you wish to have future patches mailed directly to you, you can add: \@SH package - $package $baserev - mailpatches If you are not interested in receiving any information about future patches, please send me the following mail: Subject: Command \@SH package - $package $baserev "; print MAILER " Following is the $patches description: $clog" if $clog; print MAILER " -- $progname speaking for $maintname <$maintloc>. "; close MAILER; } sub usage { print STDERR <>patnotify $grep -v '^;#' ../pl/users.pl >>patnotify $grep -v '^;#' ../pl/patseq.pl >>patnotify $grep -v '^;#' ../pl/editor.pl >>patnotify $grep -v '^;#' ../pl/listedit.pl >>patnotify $grep -v '^;#' ../pl/tilde.pl >>patnotify $grep -v '^;#' ../pl/profile.pl >>patnotify chmod +x patnotify $eunicefix patnotify