1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
#!/usr/bin/perl
# non-GUI part of DMBT
package Debbugs::DMBT;
$bts_attrs = [
'bugid',
'originater',
'date',
'subject',
'package',
'severity',
'done',
'mergedwith'
];
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $self = {};
my ($statefile) = @_;
$self->{STATEFILE} = $statefile;
$self->{STATE} = {
'bugs' => [],
};
$self->{BTS} = undef;
bless ($self, $class);
return $self;
}
sub init_ldap {
my $self = shift;
my ($host, $port, $dn) = @_;
use Debbugs::RemoteBTS::LDAP;
$self->{BTS} = new Debbugs::RemoteBTS::LDAP ($host,
'port' => $port,
'dn' => $dn);
}
sub import_package {
my $self = shift;
my ($package) = @_;
push @{$self->{STATE}->{bugs}}, $self->{BTS}->packageBugs ($package);
}
sub import_bug {
my $self = shift;
my ($bugid) = @_;
push @{$self->{STATE}->{bugs}}, $self->{BTS}->bugFromID ($bugid);
}
sub bugs {
my $self = shift;
return @{$self->{STATE}->{bugs}};
}
sub clear_bugs {
my $self = shift;
$self->{STATE}->{bugs} = [];
}
use XML::Parser;
# FIXME: Loader is highly experimental stuff - mostly playing for now
sub load_xml {
my $self = shift;
my $parser = new XML::Parser(Style => 'Tree');
my $tree = $parser->parsefile($self->{STATEFILE});
# use Data::Dumper;
# print Dumper ($tree);
die "BugList not found" unless 'buglist' eq shift @$tree;
$self->_load_buglist (shift @$tree);
}
sub _load_buglist {
my $self = shift;
my ($buglist) = @_;
my $attr = shift @$buglist;
while ('bug' eq shift @$buglist) {
my $bug = new Debbugs::BugReport;
$bug->init_from_XML_tree (shift @$buglist);
push @{$self->{STATE}->{bugs}}, $bug;
}
unless ($#$buglist == -1) {
use Data::Dumper;
die "Other things than Bugs in BugList ($_):" . Dumper (@$buglist);
}
}
use XML::Writer;
use IO;
sub save_xml {
my $self = shift;
my $output = new IO::File(">" . $self->{STATEFILE});
my $writer = new XML::Writer(OUTPUT => $output, NEWLINES => 1);
$writer->startTag ("buglist");
foreach my $bug (@{$self->{STATE}->{bugs}}) {
$bug->write_to_XML_stream ($writer);
}
$writer->endTag ("buglist");
$writer->end();
$output->close();
}
TRUE;
|