Hi Petr, On 15.05.2012 22:25, Ivan Timofeev wrote:
I will try tomorrow.
Hum, sorry for the delay. Now here is my second try. Strangely, but it seems to work... Best Regards, Ivan
>From 94236a904138d2771609344f3b428493cd6efa39 Mon Sep 17 00:00:00 2001 From: Ivan Timofeev <timofeev....@gmail.com> Date: Thu, 17 May 2012 18:38:09 +0400 Subject: [PATCH 1/2] lo-commit-stat: use bug titles instead of commit messages if possible Change-Id: I0d5bb5f593c94b039c45bde638337932fa380b55 --- bin/lo-commit-stat | 123 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 104 insertions(+), 19 deletions(-) diff --git a/bin/lo-commit-stat b/bin/lo-commit-stat index 626d601..1f067e2 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; -- 1.7.10
>From 0284326f6890113cfa1b107006ec9a4db26e968f Mon Sep 17 00:00:00 2001 From: Ivan Timofeev <timofeev....@gmail.com> Date: Thu, 17 May 2012 18:42:46 +0400 Subject: [PATCH 2/2] lo-commit-stat: remove flags and print_filters Change-Id: I3d5ecb3cc52aeba780087f4ecb6b3bf86353276c --- bin/lo-commit-stat | 36 +++++++----------------------------- 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/bin/lo-commit-stat b/bin/lo-commit-stat index 1f067e2..a14eb3e 100755 --- a/bin/lo-commit-stat +++ b/bin/lo-commit-stat @@ -49,7 +49,6 @@ sub search_bugs($$$$) # save the bug number %{$pdata->{$piece}{$commit_id}{'bugs'}} = () if (! defined %{$pdata->{$piece}{$commit_id}{'bugs'}}); $pdata->{$piece}{$commit_id}{'bugs'}{$bug} = 1; - $pdata->{$piece}{$commit_id}{'flags'}{'bug'} = 1; } return $line; @@ -99,7 +98,6 @@ sub load_git_log($$$$$) $commit_id = "$1"; $summary=undef; %{$pdata->{$piece}{"$commit_id"}} = (); - %{$pdata->{$piece}{"$commit_id"}{'flags'}} = (); next; } @@ -222,23 +220,12 @@ sub open_log_file($$$$$) return $log; } -sub print_summary_in_stat($$$$$$$$) +sub print_summary_in_stat($$$$$$) { - my ($summary, $pprint_filters, $ppiece_title, $pflags, $pbugs, $pauthors, $prefix, $log) = @_; + my ($summary, $ppiece_title, $pbugs, $pauthors, $prefix, $log) = @_; return if ( $summary eq "" ); - # do we want to print this summary at all? - my $print; - if (%{$pprint_filters}) { - foreach my $flag (keys %{$pprint_filters}) { - $print = 1 if (defined $pflags->{$flag}); - } - } else { - $print = 1; - } - return unless (defined $print); - # print piece title if not done yet if ( defined ${$ppiece_title} ) { printf $log "${$ppiece_title}\n"; @@ -259,9 +246,9 @@ sub print_summary_in_stat($$$$$$$$) printf $log $prefix . $summary . $bugs . $authors . "\n"; } -sub print_stat($$$) +sub print_stat($$) { - my ($pdata, $pprint_filters, $log) = @_; + my ($pdata, $log) = @_; foreach my $piece ( sort { $a cmp $b } keys %{$pdata}) { # check if this piece has any entries at all @@ -270,15 +257,13 @@ sub print_stat($$$) my $old_summary=""; my %authors = (); my %bugs = (); - my %flags = (); 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, \$piece_title, \%flags, \%bugs, \%authors, " + ", $log); + print_summary_in_stat($old_summary, \$piece_title, \%bugs, \%authors, " + ", $log); $old_summary = $summary; %authors = (); %bugs = (); - %flags = (); } # collect bug numbers if (defined $pdata->{$piece}{$id}{'bugs'}) { @@ -289,12 +274,8 @@ sub print_stat($$$) # collect author names my $author = $pdata->{$piece}{$id}{'author'}{'name'}; $authors{$author} = 1; - # collect flags - foreach my $flag ( keys %{$pdata->{$piece}{$id}{'flags'}} ) { - $flags{$flag} = 1; - } } - print_summary_in_stat($old_summary, $pprint_filters, \$piece_title, \%flags, \%bugs, \%authors, " + ", $log); + print_summary_in_stat($old_summary, \$piece_title, \%bugs, \%authors, " + ", $log); } } } @@ -426,7 +407,6 @@ my $git_command = "git log"; my $branch_name; my @git_args; my %data; -my %print_filters = (); my $print_mode = "normal"; foreach my $arg (@ARGV) { @@ -442,11 +422,9 @@ foreach my $arg (@ARGV) { } elsif ($arg =~ m/--log-dir=(.*)/) { $log_dir = "$1"; } elsif ($arg eq '--bugs') { - $print_filters{'bug'} = 1; $log_prefix = "bugfixes"; $print_mode = "bugs"; } elsif ($arg eq '--bug-numbers') { - $print_filters{'bug'} = 1; $log_prefix = "bugnumbers"; $print_mode = "bugnumbers"; } elsif ($arg eq '--rev-list') { @@ -480,6 +458,6 @@ if ( $print_mode eq "bugs" ) { } elsif ( $print_mode eq "bugnumbers" ) { print_bugnumbers(\%data, $log); } else { - print_stat(\%data, \%print_filters, $log); + print_stat(\%data, $log); } close $log; -- 1.7.10
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice