diff options
author | Ivan Timofeev <timofeev.i.s@gmail.com> | 2012-05-17 18:38:09 +0400 |
---|---|---|
committer | Petr Mladek <pmladek@suse.cz> | 2012-05-18 18:08:24 +0200 |
commit | a8b77a529047d2d26b1633df3c0f6511fc379305 (patch) | |
tree | 50a6170411d78d10b6765729bfc819ed567017d0 /bin/lo-commit-stat | |
parent | a24a38695b857984600f1b17ccc9b976d6ec53d6 (diff) |
lo-commit-stat: use bug titles instead of commit messages if possible
Change-Id: I0d5bb5f593c94b039c45bde638337932fa380b55
Diffstat (limited to 'bin/lo-commit-stat')
-rwxr-xr-x | bin/lo-commit-stat | 123 |
1 files changed, 104 insertions, 19 deletions
diff --git a/bin/lo-commit-stat b/bin/lo-commit-stat index 626d6016f99d..1f067e247afd 100755 --- a/bin/lo-commit-stat +++ b/bin/lo-commit-stat @@ -4,10 +4,18 @@ #!/usr/bin/perl use strict; +use LWP::UserAgent; my $main_repo="core"; my @pieces=("binfilter", "dictionaries", "help", "translations"); +my %bugzillas = ( + fdo => "https://bugs.freedesktop.org/", + bnc => "https://bugzilla.novell.com/", + rhbz => "https://bugzilla.redhat.com/", + i => "https://issues.apache.org/ooo/", +); + sub search_bugs($$$$) { my ($pdata, $piece, $commit_id, $line) = @_; @@ -214,9 +222,9 @@ sub open_log_file($$$$$) return $log; } -sub print_summary_in_stat($$$$$$$$$) +sub print_summary_in_stat($$$$$$$$) { - my ($summary, $pprint_filters, $print_mode, $ppiece_title, $pflags, $pbugs, $pauthors, $prefix, $log) = @_; + my ($summary, $pprint_filters, $ppiece_title, $pflags, $pbugs, $pauthors, $prefix, $log) = @_; return if ( $summary eq "" ); @@ -232,7 +240,7 @@ sub print_summary_in_stat($$$$$$$$$) return unless (defined $print); # print piece title if not done yet - if ( defined ${$ppiece_title} && $print_mode ne "bugnumbers" ) { + if ( defined ${$ppiece_title} ) { printf $log "${$ppiece_title}\n"; ${$ppiece_title} = undef; } @@ -240,11 +248,7 @@ sub print_summary_in_stat($$$$$$$$$) # finally print the summary line my $bugs = ""; if ( %{$pbugs} ) { - if ( $print_mode eq "bugnumbers" ) { - $bugs = join ("\n", keys %{$pbugs}) . "\n"; - } else { - $bugs = " (" . join (", ", keys %{$pbugs}) . ")"; - } + $bugs = " (" . join (", ", keys %{$pbugs}) . ")"; } my $authors = ""; @@ -252,16 +256,12 @@ sub print_summary_in_stat($$$$$$$$$) $authors = " [" . join (", ", keys %{$pauthors}) . "]"; } - if ( $print_mode eq "bugnumbers" ) { - printf $log $bugs; - } else { - printf $log $prefix . $summary . $bugs . $authors . "\n"; - } + printf $log $prefix . $summary . $bugs . $authors . "\n"; } -sub print_stat($$$$) +sub print_stat($$$) { - my ($pdata, $pprint_filters, $print_mode, $log) = @_; + my ($pdata, $pprint_filters, $log) = @_; foreach my $piece ( sort { $a cmp $b } keys %{$pdata}) { # check if this piece has any entries at all @@ -274,7 +274,7 @@ sub print_stat($$$$) foreach my $id ( sort { $pdata->{$piece}{$a}{'summary'} cmp $pdata->{$piece}{$b}{'summary'} } keys %{$pdata->{$piece}}) { my $summary = $pdata->{$piece}{$id}{'summary'}; if ($summary ne $old_summary) { - print_summary_in_stat($old_summary, $pprint_filters, $print_mode, \$piece_title, \%flags, \%bugs, \%authors, " + ", $log); + print_summary_in_stat($old_summary, $pprint_filters, \$piece_title, \%flags, \%bugs, \%authors, " + ", $log); $old_summary = $summary; %authors = (); %bugs = (); @@ -294,9 +294,87 @@ sub print_stat($$$$) $flags{$flag} = 1; } } - print_summary_in_stat($old_summary, $pprint_filters, $print_mode, \$piece_title, \%flags, \%bugs, \%authors, " + ", $log); + print_summary_in_stat($old_summary, $pprint_filters, \$piece_title, \%flags, \%bugs, \%authors, " + ", $log); + } + } +} + +sub get_bug_name($$) +{ + my ($bug, $summary) = @_; + print "$bug\n"; + + $bug =~ m/(?:(\w*)\#+(\d+))/; # fdo#12345 + my $bugzilla = $1; # fdo + my $bug_number = $2; # 12345 + + if ( $bugzillas{$bugzilla} ) { + my $url = $bugzillas{$bugzilla} . "show_bug.cgi?id=" . $bug_number; + my $ua = LWP::UserAgent->new; + $ua->timeout(10); + $ua->env_proxy; + my $response = $ua->get($url); + if ($response->is_success) { + my $title = $response->title(); + if ( $title =~ s/^Bug \d+ – // ) { + return $title; + } + } + } + + return $summary; +} + +sub print_bugs($$) +{ + my ($pdata, $log) = @_; + + # associate bugs with their summaries and fixers + my %bugs = (); + foreach my $piece ( keys %{$pdata}) { + foreach my $id ( keys %{$pdata->{$piece}}) { + foreach my $bug (keys %{$pdata->{$piece}{$id}{'bugs'}}) { + my $author = $pdata->{$piece}{$id}{'author'}{'name'}; + my $summary = $pdata->{$piece}{$id}{'summary'}; + $bugs{$bug}{'summary'} = $summary; + $bugs{$bug}{'author'}{$author} = 1; + } + } + } + + # try to replace summaries with bug names from bugzilla + foreach my $bug ( keys %bugs) { + $bugs{$bug}{'summary'} = get_bug_name($bug, $bugs{$bug}{'summary'}); + } + + # print + foreach my $bug ( sort { $a cmp $b } keys %bugs) { + my $summary = $bugs{$bug}{'summary'}; + + my $authors = ""; + if ( %{$bugs{$bug}{'author'}} ) { + $authors = " [" . join (", ", keys %{$bugs{$bug}{'author'}}) . "]"; + } + + printf $log $bug . " " . $summary . $authors . "\n"; + } +} + +sub print_bugnumbers($$) +{ + my ($pdata, $log) = @_; + + # just collect bugs + my %bugs = (); + foreach my $piece ( keys %{$pdata}) { + foreach my $id ( keys %{$pdata->{$piece}}) { + foreach my $bug (keys %{$pdata->{$piece}{$id}{'bugs'}}) { + $bugs{$bug} = 1; + } } } + + printf $log join ("\n", keys %bugs) . "\n"; } ######################################################################## @@ -365,7 +443,8 @@ foreach my $arg (@ARGV) { $log_dir = "$1"; } elsif ($arg eq '--bugs') { $print_filters{'bug'} = 1; - $log_prefix = "bugfixes" + $log_prefix = "bugfixes"; + $print_mode = "bugs"; } elsif ($arg eq '--bug-numbers') { $print_filters{'bug'} = 1; $log_prefix = "bugnumbers"; @@ -396,5 +475,11 @@ $branch_name = get_branch_name($top_dir); load_data(\%data, $top_dir, $piece, $branch_name, $git_command); $log = open_log_file($log_dir, $log_prefix, $log_suffix, $top_dir, $branch_name); -print_stat(\%data, \%print_filters, $print_mode, $log); +if ( $print_mode eq "bugs" ) { + print_bugs(\%data, $log); +} elsif ( $print_mode eq "bugnumbers" ) { + print_bugnumbers(\%data, $log); +} else { + print_stat(\%data, \%print_filters, $log); +} close $log; |