File: DMBT.pm

package info (click to toggle)
dmbt 0.1.3
  • links: PTS
  • area: main
  • in suites: woody
  • size: 308 kB
  • ctags: 102
  • sloc: perl: 1,590; makefile: 74; python: 65
file content (123 lines) | stat: -rw-r--r-- 2,296 bytes parent folder | download
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;