#!/usr/bin/env perl # # MAINTAINER= miwi@FreeBSD.org # # $FreeBSD: branches/pkg_install/Tools/scripts/getpr 358817 2014-06-22 17:53:44Z adamw $ # use strict; my $pr = shift; my $user = shift; my $ssh; if ($pr eq "") { print STDERR "getpr prnum [username]\n"; exit 1 } if( !defined $ENV{"CVS_RSH"} ) { $ssh = "ssh"; } else { $ssh = $ENV{"CVS_RSH"}; } if ($user ne "") { $user = "$user@"; } my $pr_num = "PR_" . $pr; my $pr_patch = "PR_" . $pr . ".patch"; # get the PR off of freefall open(D, "> $pr_num") or die "$pr_num: $!"; open(PATCH, "> $pr_patch") or die "$pr_patch: $!"; open(PR, " ${ssh} ${user}freefall.freebsd.org query-pr -F $pr | ") or die $!; my $fix = ""; my $infix = 0; while() { print D; if (m/^>Release-Note:/) { $infix = 0; } if ($infix == 1) { print PATCH; } if (m/^>Fix:/) { $infix = 1; } } close(D); close(PR); close(PATCH); # decode the submission attempting to find a file attachment by extension # .tar.gz, .shar or just .gz, if not found, display what we think of as # the file submission (probably just a patch) open(PATCH, $pr_patch); while() { if (m/^# This is a shell archive. Save it in a file, remove anything before/) { &shar; exit; } if (m/^begin (\d+)? (.*)/) { &uudecode($2); close(PATCH); exit; } } close(PATCH); system("more $pr_patch"); exit; sub uudecode { my ($fname) = @_; $fname =~ s/\s+$//g; print "$fname\n"; print `uudecode $pr_patch`; if (($fname =~ m/.tar.gz$/) || ($fname =~ m/.tgz$/)) { print "you may extract this tarball by typing tar xvzf $fname\n"; } elsif ($fname =~ m/.gz$/) { print `gunzip $fname`; } } sub shar { print "you may extract this shar archive by typing sh $pr_patch\n"; }