- my $bug = {id => $data->{bug_num},
- creation => DateTime->from_epoch(epoch => $data->{date}),
- log_modified => DateTime->from_epoch(epoch => $data->{log_modified}),
- last_modified => DateTime->from_epoch(epoch => $data->{last_modified}),
- archived => $data->{archived},
- (defined $data->{unarchived} and length($data->{unarchived}))?(unarchived => DateTime->from_epoch(epoch => $data->{unarchived})):(),
- forwarded => $data->{forwarded} // '',
- summary => $data->{summary} // '',
- outlook => $data->{outlook} // '',
- subject => $data->{subject} // '',
- done => $data->{done} // '',
- owner => $data->{owner} // '',
- submitter => $data->{submitter} // '',
- severity => length($data->{severity}) ? $data->{severity} : $config{default_severity},
- };
- $s->resultset('Bug')->update_or_create($bug);
- $s->txn_do(sub {
+ my $severity = length($data->{severity}) ? $data->{severity} : $config{default_severity};
+ if (exists $severities->{$severity}) {
+ $severity = $severities->{$severity};
+ } else {
+ $severity = $s->resultset('Severity')->
+ find_or_create({severity => $severity});
+ }
+ my $bug =
+ {id => $data->{bug_num},
+ creation => DateTime->from_epoch(epoch => $data->{date}),
+ log_modified => DateTime->from_epoch(epoch => $data->{log_modified}),
+ last_modified => DateTime->from_epoch(epoch => $data->{last_modified}),
+ archived => $data->{archived},
+ (defined $data->{unarchived} and length($data->{unarchived}))?(unarchived => DateTime->from_epoch(epoch => $data->{unarchived})):(),
+ forwarded => $data->{forwarded} // '',
+ summary => $data->{summary} // '',
+ outlook => $data->{outlook} // '',
+ subject => $data->{subject} // '',
+ done_full => $data->{done} // '',
+ severity => $severity,
+ owner_full => $data->{owner} // '',
+ submitter_full => $data->{originator} // '',
+ };
+ my %addr_map =
+ (done => 'done',
+ owner => 'owner',
+ submitter => 'originator',
+ );
+ for my $addr_type (keys %addr_map) {
+ my @addrs = getparsedaddrs($data->{$addr_map{$addr_type}} // '');
+ next unless @addrs;
+ $bug->{$addr_type} = $s->resultset('Correspondent')->find_or_create({addr => $addrs[0]->address()});
+ # insert the full name as well
+ my $full_name = $addrs[0]->phrase();
+ $full_name =~ s/^\"|\"$//g;
+ $full_name =~ s/^\s+|\s+$//g;
+ $bug->{$addr_type}->update_or_create_related('correspondent_full_names',{full_name=>$full_name}) if length $full_name;
+ }
+ my $b = $s->resultset('Bug')->update_or_create($bug) or
+ die "Unable to update or create bug $bug->{id}";
+ $s->txn_do(sub {