Mercurial > pub > buggler
comparison translate.pl @ 6:2a5f38eb25a9
migrated to saxon8 as xslt processor
fixed dependency calculation when a container has a dependency on his grandchild
| author | cin |
|---|---|
| date | Wed, 02 Sep 2015 20:43:38 +0300 |
| parents | d2efec56373f |
| children | 29309bc8d932 |
comparison
equal
deleted
inserted
replaced
| 5:d2efec56373f | 6:2a5f38eb25a9 |
|---|---|
| 2 | 2 |
| 3 use JSON; | 3 use JSON; |
| 4 use YAML::XS qw(LoadFile Dump); | 4 use YAML::XS qw(LoadFile Dump); |
| 5 use URI; | 5 use URI; |
| 6 use XML::Writer; | 6 use XML::Writer; |
| 7 use IPC::Run qw(run); | 7 use IPC::Run qw(start finish); |
| 8 | 8 |
| 9 our @ClassPath = qw( | 9 our @ClassPath = qw( |
| 10 /usr/share/java/xalan-j2-serializer.jar | 10 /usr/share/java/xalan-j2-serializer.jar |
| 11 /usr/share/java/xalan-j2.jar | 11 /usr/share/java/xalan-j2.jar |
| 12 /usr/share/java/xerces-j2.jar | 12 /usr/share/java/xerces-j2.jar |
| 23 my $bz = BzRest->new( | 23 my $bz = BzRest->new( |
| 24 url => $config->{bugzilla}{url}, | 24 url => $config->{bugzilla}{url}, |
| 25 apikey => $config->{bugzilla}{apikey} | 25 apikey => $config->{bugzilla}{apikey} |
| 26 ); | 26 ); |
| 27 | 27 |
| 28 my $bugs = $bz->GetBugs( { ids => [ 283, 284 ] } ); | |
| 29 | |
| 30 my @fields = qw( | 28 my @fields = qw( |
| 31 id | 29 id |
| 32 creation_time | 30 summary |
| 33 last_change_time | 31 creation_time |
| 34 creator | 32 last_change_time |
| 35 assigned_to | 33 creator |
| 36 | 34 assigned_to |
| 37 status | 35 |
| 38 resolution | 36 status |
| 39 | 37 resolution |
| 40 priority | 38 |
| 41 severity | 39 priority |
| 42 url | 40 severity |
| 43 | 41 url |
| 44 blocks | 42 |
| 45 depends_on | 43 blocks |
| 46 cc | 44 depends_on |
| 47 | 45 cc |
| 48 component | 46 |
| 49 product | 47 component |
| 50 classification | 48 product |
| 51 version | 49 classification |
| 52 | 50 version |
| 53 actual_time | 51 |
| 54 estimated_time | 52 actual_time |
| 55 remainig_time | 53 estimated_time |
| 56 deadline | 54 remainig_time |
| 55 deadline | |
| 57 ); | 56 ); |
| 58 | 57 |
| 59 my %fieldsMap = ( | 58 my %fieldsMap = ( |
| 60 id => 'bug_id', | 59 summary => 'short_desc', |
| 61 creator => 'reporter', | 60 id => 'bug_id', |
| 62 status => 'bug_status', | 61 creator => 'reporter', |
| 63 severity => 'bug_severity', | 62 status => 'bug_status', |
| 64 blocks => 'blocked', | 63 severity => 'bug_severity', |
| 65 depends_on => 'dependson', | 64 blocks => 'blocked', |
| 66 creation_time => 'creation_ts', | 65 depends_on => 'dependson', |
| 66 creation_time => 'creation_ts', | |
| 67 last_change_time => 'delta_ts' | 67 last_change_time => 'delta_ts' |
| 68 ); | 68 ); |
| 69 | 69 |
| 70 my $writer = XML::Writer->new( OUTPUT => \*STDOUT, ENCODING => 'utf-8' ); | 70 local (*HIN); |
| 71 | |
| 72 my $proc = start( [ 'saxon8', '-novw', '-', 'bug-list.xsl' ], | |
| 73 '<pipe', \*HIN, '>', \*STDOUT ) | |
| 74 or die "failed to create pipe: $!"; | |
| 75 | |
| 76 my $writer = XML::Writer->new( OUTPUT => \*HIN, ENCODING => 'utf-8' ); | |
| 71 | 77 |
| 72 $writer->xmlDecl("UTF-8"); | 78 $writer->xmlDecl("UTF-8"); |
| 73 $writer->startTag("bugzilla"); | 79 $writer->startTag("bugzilla"); |
| 74 | 80 |
| 75 foreach my $bug ( @$bugs ) { | 81 my %visited; |
| 76 $writer->startTag("bug"); | 82 my @queue = (283); |
| 77 foreach my $field ( @fields ) { | 83 |
| 78 next unless $bug->{$field}; | 84 while (@queue) { |
| 79 | 85 @queue = grep not( $visited{$_}++ ), @queue; |
| 80 my $tagName = $fieldsMap{$field} || $field; | 86 |
| 81 my @values = ref($bug->{$field}) && ref($bug->{$field}) eq 'ARRAY' ? @{$bug->{$field}} : $bug->{$field}; | 87 last unless @queue; |
| 82 | 88 |
| 83 foreach my $v (@values) { | 89 print "#Fetching: ", join( ', ', @queue ), "\n"; |
| 84 $writer->dataElement($tagName, $v); | 90 |
| 91 my $bugs = $bz->GetBugs( { ids => \@queue } ); | |
| 92 | |
| 93 @queue = (); | |
| 94 | |
| 95 foreach my $bug (@$bugs) { | |
| 96 | |
| 97 push @queue, @{ $bug->{depends_on} } | |
| 98 if ( $bug->{depends_on} ); | |
| 99 | |
| 100 $writer->startTag("bug"); | |
| 101 foreach my $field (@fields) { | |
| 102 next unless $bug->{$field}; | |
| 103 | |
| 104 my $tagName = $fieldsMap{$field} || $field; | |
| 105 my @values = | |
| 106 ref( $bug->{$field} ) | |
| 107 && ref( $bug->{$field} ) eq 'ARRAY' | |
| 108 ? @{ $bug->{$field} } | |
| 109 : $bug->{$field}; | |
| 110 | |
| 111 foreach my $v (@values) { | |
| 112 $writer->dataElement( $tagName, $v ); | |
| 113 } | |
| 85 } | 114 } |
| 115 $writer->endTag(); | |
| 116 | |
| 86 } | 117 } |
| 87 $writer->endTag(); | |
| 88 } | 118 } |
| 89 | 119 |
| 90 $writer->endTag(); | 120 $writer->endTag(); |
| 91 | 121 |
| 92 | 122 close HIN; |
| 123 finish($proc); | |
| 93 | 124 |
| 94 #xalan( | 125 #xalan( |
| 95 # -IN => "bug-list2.xml", | 126 # in => \*OUT, |
| 96 # -XSL => "bug-list.xsl", | 127 # out => \*STDOUT, |
| 97 # -URIRESOLVER => "org.apache.xml.resolver.tools.CatalogResolver", | 128 # params => [ |
| 98 # -ENTITYRESOLVER => "org.apache.xml.resolver.tools.CatalogResolver", | 129 # |
| 99 # -PARAM => (chargeset => "dev") | 130 # ] |
| 100 #); | 131 #); |
| 101 | 132 |
| 102 sub xalan { | 133 sub xalan { |
| 103 my @params = @_; | 134 my @params = @_; |
| 104 return system 'java', | 135 return system 'java', |
