Bug#815220: New script: cleanbug

Mike Gabriel <[email protected]>
Newsgroups gmane.linux.debian.devel.debbugs
Organization DAS-NETZWERKTEAM
Message-ID <20160220084333.Horde.mH0uIrcgqnN30caclGlB-uS__40727.7834754952$1455957932$gmane$org@mail.das-netzwerkteam.de>
Package: debbugs
Severity: wishlist
Version: 2.6~exp1

Hi all,

I have created a little but very helpful script for debbugs (placed in  
/usr/lib/debbugs): cleanbug.

The script is attached and currently in use while cleaning up SPAM and  
virus infected mails from bugs.x2go.org.

Greets,
Mike
-- 

DAS-NETZWERKTEAM
mike gabriel, herweg 7, 24357 fleckeby
fon: +49 (1520) 1976 148

GnuPG Key ID 0x25771B31
mail: [email protected], http://das-netzwerkteam.de

freeBusy:
https://mail.das-netzwerkteam.de/mailxchange/kronolith/fb.php?u=m.gabriel%40das-netzwerkteam.de
cleanbug (text/plain, 2.4 KB)
#!/usr/bin/perl

use warnings;
use strict;

use POSIX qw(strftime);

use Debbugs::Config qw(:globals :text);

# for read_log_records
use Debbugs::Log qw(read_log_records write_log_records);
use Debbugs::Common qw(buglog bug_status);
use Debbugs::Status qw( split_status_fields get_bug_status);

use List::Util qw(max);

sub prompt {
	my ($query) = @_; # take a prompt string as argument
	local $| = 1; # activate autoflush to immediately show the prompt
	print $query;
	chomp(my $answer = <STDIN>);
	return $answer;
}

sub prompt_yesno {
	my ($query) = @_;
	my $answer = prompt("$query (Y/n): ");
	return (lc($answer) ne 'n');
}

sub prompt_noyes {
	my ($query) = @_;
	my $answer = prompt("$query (N/y): ");
	return (lc($answer) eq 'y');
}

my $ref = shift or die;

my %bugusertags;

my $buglog = buglog($ref);
my $bug_status = bug_status($ref);

my $buglogfh;
my $cleanedbuglogfh;
if ($buglog =~ m/\.gz$/) {
    my $oldpath = $ENV{'PATH'};
    $ENV{'PATH'} = '/bin:/usr/bin';
    $buglogfh = IO::File->new("zcat $buglog |") or die("open log for $ref: $!");
    $ENV{'PATH'} = $oldpath;
} else {
    $buglogfh = IO::File->new($buglog,'r') or die("open log for $ref: $!");
}

my %status =
    %{split_status_fields(get_bug_status(bug=>$ref,
                                         bugusertags => \%bugusertags,
                                        ))};

my @records;
eval{
     @records = read_log_records($buglogfh);
};
my @cleaned_records = ();

binmode(STDOUT,":raw");
my $date = strftime "%a %b %d %T %Y", localtime;

my $message_number=0;

for my $record (@records) {
	my ($msg_id) = $record->{text} =~ /^Message-Id:\s+<(.+)>/im;
	my @lines = split( "\n", $record->{text}, -1 );
	if ( $lines[ 1 ] =~ m/^From / ) {
		my $tmp = $lines[ 0 ];
		$lines[ 0 ] = $lines[ 1 ];
		$lines[ 1 ] = $tmp;
	}
	if ( !( $lines[ 0 ] =~ m/^From / ) ) {
		unshift @lines, "From unknown $date";
	}
	map { s/^(>*From )/>$1/ } @lines[ 1 .. $#lines ];
	print join( "\n", @lines ) . "\n";

	if ( prompt_yesno("Keep this message in the bug report") ) {
		print "ANSWER WAS: YES\n\n";
		push @cleaned_records, $record;
	} else {
		print "\nANSWER WAS: NO\n\n";
	}
}

$buglogfh->close();

if ( prompt_noyes("Really write back the bug log of bug $ref") ) {
	print "\nANSWER WAS: YES\n\n";
	$cleanedbuglogfh = IO::File->new($buglog,'w') or die("open log for $ref: $!");
	write_log_records(logfh => $cleanedbuglogfh,
	                  records => \@cleaned_records,
	);
} else {
	print "\nANSWER WAS: NO\n\n";
}

exit 0;
signature.asc (application/pgp-signature, 819 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAABCAAGBQJWyCc1AAoJEJr0azAldxsxPtoP/2d4LogwZsinPS7FrQRG+lZ7
AUk/JxujK+K1TQxuFvYJibSFV6u1koUT3wOmLbiev+xckoWbu6GutBnxMFxJ95gW
i8Ahp/H9b3Hr36ePbY/Un14cGTllfYrfEHgMS6hvbgjoxJtNpWk2TDW9T9ytzoji
i0iXdMq7tQDuEZQpHjNCM3iirP6i6UU9v7E+AqKlwi3mdYZMLXewv+kz1X77hWoJ
0/ERpvz7lEa+YNcYQ/R/vDYTh6cAiOBJuVAI7fmEJm70xUanicu7WUHtGr/N8Kxs
lvWpmN9ql0nGHomTfiNT7j0CpPksE7I4yxADRWVykk2nz1J2BEBTT5mBJhFyEncS
DdRCSrC1JH8BE4Vusi/OQjUenYNuD67nOWWHjJTvkDY/HSURKEx3f21QUh1oUnVe
21FVyxxJpM1eaYDYFwSl0nLeWNI8qnGjdoSv8/a9/Ko95BkK2lYSrdm22fH+6CYI
cOjnFYarjHnKrqboaCnGPKW/N4ULWphjxYmD8ZZ+cc93U13wTYEdQWkC7dvkk7Pt
MYpop31sPUXZuAm9wENvGyhvYKt5nLpqzb8nIHqO6je4qXnDIM9BIRXhUTnD2CbW
CRuHhhQvpvh2frJHJSi4X7Xp2mr1XPJbGfy4nEjnYDmXGoFsR9SJSCEojweNEF3H
HGDdc7HZJohOBqUD7bv1
=QW7v
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.