Hello community, here is the log from the commit of package abi-tracker for openSUSE:Factory checked in at 2017-09-05 15:16:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/abi-tracker (Old) and /work/SRC/openSUSE:Factory/.abi-tracker.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "abi-tracker" Tue Sep 5 15:16:09 2017 rev:2 rq:520534 version:1.11 Changes: -------- --- /work/SRC/openSUSE:Factory/abi-tracker/abi-tracker.changes 2017-07-08 12:34:51.426580687 +0200 +++ /work/SRC/openSUSE:Factory/.abi-tracker.new/abi-tracker.changes 2017-09-05 15:16:10.449191615 +0200 @@ -1,0 +2,12 @@ +Sun Sep 3 19:07:47 UTC 2017 - astie...@suse.com + +- update to 1.11: + * Compress ABI dumps by default + * Added new target 'compress' to compress existing ABI dumps + * Added -clean-unused option to remove unused files (reports, + ABI dumps, etc.) + * Fixed graph of ABI symbols + * Changed graph format from PNG to SVG + * Added NoCompress option of the profile + +------------------------------------------------------------------- Old: ---- abi-tracker-1.10.tar.gz New: ---- abi-tracker-1.11.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ abi-tracker.spec ++++++ --- /var/tmp/diff_new_pack.MnvvG3/_old 2017-09-05 15:16:11.125096608 +0200 +++ /var/tmp/diff_new_pack.MnvvG3/_new 2017-09-05 15:16:11.125096608 +0200 @@ -17,7 +17,7 @@ Name: abi-tracker -Version: 1.10 +Version: 1.11 Release: 0 Summary: Visualize ABI changes timeline of a C/C++ software library License: GPL-2.0+ or LGPL-2.1+ @@ -25,8 +25,9 @@ Url: https://abi-laboratory.pro/tracker/ Source: https://github.com/lvc/abi-tracker/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz BuildRequires: help2man -Requires: abi-compliance-checker >= 1.99.21 -Requires: abi-dumper >= 0.99.16 +Requires: abi-compliance-checker >= 2.2 +Requires: abi-dumper >= 1.1 +Requires: abi-monitor >= 1.12 Requires: binutils Requires: perl-base >= 5.8 Requires: pkgdiff >= 1.6.4 ++++++ abi-tracker-1.10.tar.gz -> abi-tracker-1.11.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abi-tracker-1.10/README new/abi-tracker-1.11/README --- old/abi-tracker-1.10/README 2017-06-18 06:57:58.000000000 +0200 +++ new/abi-tracker-1.11/README 2017-08-30 08:30:46.000000000 +0200 @@ -13,9 +13,10 @@ REQUIRES: Perl 5 (5.8 or newer) Elfutils - ABI Dumper (0.99.16 or newer) + ABI Dumper (1.1 or newer) Vtable-Dumper (1.1 or newer) - ABI Compliance Checker (1.99.21 or newer) + ABI Compliance Checker (2.2 or newer) + ABI Monitor (1.12 or newer) PkgDiff (1.6.4 or newer) RfcDiff (1.41 or newer) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abi-tracker-1.10/abi-tracker.pl new/abi-tracker-1.11/abi-tracker.pl --- old/abi-tracker-1.10/abi-tracker.pl 2017-06-18 06:57:58.000000000 +0200 +++ new/abi-tracker-1.11/abi-tracker.pl 2017-08-30 08:30:46.000000000 +0200 @@ -1,6 +1,6 @@ #!/usr/bin/perl ################################################################## -# ABI Tracker 1.10 +# ABI Tracker 1.11 # A tool to visualize ABI changes timeline of a C/C++ software library # # Copyright (C) 2015-2017 Andrey Ponomarenko's ABI Laboratory @@ -15,9 +15,9 @@ # ============ # Perl 5 # Elfutils (eu-readelf) -# ABI Dumper (0.99.16 or newer) +# ABI Dumper (1.1 or newer) # Vtable-Dumper (1.1 or newer) -# ABI Compliance Checker (1.99.21 or newer) +# ABI Compliance Checker (2.2 or newer) # PkgDiff (1.6.4 or newer) # RfcDiff 1.41 # @@ -40,11 +40,10 @@ use File::Temp qw(tempdir); use File::Basename qw(dirname basename); use File::Copy qw(copy); -use Time::Local; use Cwd qw(abs_path cwd); use Data::Dumper; -my $TOOL_VERSION = "1.10"; +my $TOOL_VERSION = "1.11"; my $DB_NAME = "Tracker.data"; my $TMP_DIR = tempdir(CLEANUP=>1); my $INSTALL_ROOT = "installed"; @@ -60,11 +59,11 @@ loadModule("Utils"); my $ABI_DUMPER = "abi-dumper"; -my $ABI_DUMPER_VERSION = "0.99.16"; +my $ABI_DUMPER_VERSION = "1.1"; my $ABI_DUMPER_EE = 0; my $ABI_CC = "abi-compliance-checker"; -my $ABI_CC_VERSION = "1.99.21"; +my $ABI_CC_VERSION = "2.2"; my $RFCDIFF = "rfcdiff"; my $PKGDIFF = "pkgdiff"; @@ -115,6 +114,8 @@ "v=s" => \$In::Opt{"TargetVersion"}, "t|target=s" => \$In::Opt{"TargetElement"}, "clear!" => \$In::Opt{"Clear"}, + "clean-unused!" => \$In::Opt{"CleanUnused"}, + "force!" => \$In::Opt{"Force"}, "global-index!" => \$In::Opt{"GlobalIndex"}, "disable-cache!" => \$In::Opt{"DisableCache"}, "deploy=s" => \$In::Opt{"Deploy"}, @@ -234,6 +235,9 @@ my $LinkNew = " new"; my $LinkRemoved = " removed"; +# Dumps +my $COMPRESS = "tar.gz"; + sub get_Modules() { my $TOOL_DIR = dirname($0); @@ -429,6 +433,63 @@ return 0; } +sub cleanUnused() +{ + printMsg("INFO", "Cleaning unused data"); + my @Versions = getVersionsList(); + + my %SeqVer = (); + my %PoinVer = (); + + foreach my $K (0 .. $#Versions) + { + my $V1 = $Versions[$K]; + my $V2 = undef; + + if($K<$#Versions) { + $V2 = $Versions[$K+1]; + } + + $PoinVer{$V1} = 1; + + if(defined $V2) { + $SeqVer{$V2}{$V1} = 1; + } + } + + foreach my $V (keys(%{$DB->{"ABIDump"}})) + { + if(not defined $PoinVer{$V}) + { + printMsg("INFO", "Unused ABI dump v.$V"); + + if(defined $In::Opt{"Force"}) { + rmtree("abi_dump/$TARGET_LIB/$V"); + } + } + } + + foreach my $O_V (keys(%{$DB->{"ABIReport"}})) + { + foreach my $V (keys(%{$DB->{"ABIReport"}{$O_V}})) + { + if(not defined $SeqVer{$O_V}{$V}) + { + printMsg("INFO", "Unused ABI report from $O_V to $V"); + if(defined $In::Opt{"Force"}) + { + rmtree("objects_report/$TARGET_LIB/$O_V/$V"); + rmtree("compat_report/$TARGET_LIB/$O_V/$V"); + } + } + } + } + + if(not defined $In::Opt{"Force"}) { + printMsg("INFO", "Use -force option to remove unused data"); + } +} + sub buildData() { my @Versions = getVersionsList(); @@ -504,6 +565,18 @@ } } + if(checkTarget("compress")) + { + foreach my $V (@Versions) + { + if(skipVersion_T($V)) { + next; + } + + compressABIDump($V); + } + } + if($In::Opt{"Rebuild"} and not $In::Opt{"TargetElement"} and $In::Opt{"TargetVersion"}) { # rebuild previous ABI dump my $PV = undef; @@ -666,6 +739,11 @@ print STDERR "WARNING: TotalSymbols property is missed, reading ABI dump for ".$Dump->{"Object"}." ($V) ...\n"; $Dump->{"TotalSymbols"} = countSymbols($Dump); } + elsif(defined $In::Opt{"DisableCache"}) + { # re-count + print STDERR "WARNING: re-counting symbols in ABI dump for ".$Dump->{"Object"}." ($V) ...\n"; + $Dump->{"TotalSymbols"} = countSymbols($Dump); + } elsif(not defined $Dump->{"Version"} or cmpVersions_S($Dump->{"Version"}, "1.7")<0) { # TotalSymbols is fixed in 1.7 @@ -714,6 +792,8 @@ my $Content = ""; my $Val_Pre = $StartVal; + my $Few = (defined $Profile->{"GraphFewXTics"} and $Profile->{"GraphFewXTics"} eq "On"); + foreach (0 .. $#Vs) { my $V = $Vs[$_]; @@ -735,8 +815,6 @@ $MaxRange = $Val; } - my $Few = (defined $Profile->{"GraphFewXTics"} and $Profile->{"GraphFewXTics"} eq "On"); - my $V_S = $V; if(defined $Profile->{"GraphShortXTics"}) @@ -775,14 +853,16 @@ my $Delta = $MaxRange - $MinRange; - $MinRange -= int($Delta*5/100); - $MaxRange += int($Delta*5/100); - - if($MaxRange-$MinRange<20) + if($Delta<20) { $MinRange -= 5; $MaxRange += 5; } + else + { + $MinRange -= int($Delta/20); + $MaxRange += int($Delta/20); + } my $Data = $TMP_DIR."/graph.data"; @@ -790,7 +870,7 @@ my $GraphTitle = ""; # Timeline of ABI changes - my $GraphPath = "graph/$TARGET_LIB/graph.png"; + my $GraphPath = "graph/$TARGET_LIB/graph.svg"; mkpath(getDirname($GraphPath)); my $Title = showTitle(); @@ -801,7 +881,7 @@ $Cmd .= "set ylabel 'ABI symbols';"; $Cmd .= "set xrange [0:".$#Vs."];"; $Cmd .= "set yrange [$MinRange:$MaxRange];"; - $Cmd .= "set terminal png size 400,300;"; + $Cmd .= "set terminal svg size 380,300;"; $Cmd .= "set output \'$GraphPath\';"; $Cmd .= "set nokey;"; $Cmd .= "set xtics font 'Times, 12';"; @@ -1382,7 +1462,8 @@ foreach my $Name ("NEWS", "CHANGES", "CHANGES.txt", "RELEASE_NOTES", "ChangeLog", "ChangeLog.md", "Changelog", "changelog", "RELEASE_NOTES.md", "CHANGELOG.md", "CHANGELOG.txt", "RELEASE_NOTES.markdown", "NEWS.md", - "CHANGES.md", "changes.txt", "changes", "CHANGELOG", "RELEASE-NOTES", "WHATSNEW", "CHANGE_LOG", "doc/ChangeLog") + "CHANGES.md", "changes.txt", "changes", "CHANGELOG", "RELEASE-NOTES", "WHATSNEW", "CHANGE_LOG", "doc/ChangeLog", + "ChangeLog.txt") { if(-f $Dir."/".$Name and (-s $Dir."/".$Name > $MIN_LOG)) @@ -1583,6 +1664,46 @@ return (); } +sub readDump($) +{ + my $Path = abs_path($_[0]); + + if($Path!~/\.\Q$COMPRESS\E\Z/) { + return readFile($Path); + } + + my $Cmd_E = "tar -xOf \"$Path\""; + my $Content = qx/$Cmd_E/; + return $Content; +} + +sub compressABIDump($) +{ + my $V = $_[0]; + + foreach my $Md5 (keys(%{$DB->{"ABIDump"}{$V}})) + { + my $DumpPath = $DB->{"ABIDump"}{$V}{$Md5}{"Path"}; + + if($DumpPath=~/\.\Q$COMPRESS\E\Z/) { + next; + } + + printMsg("INFO", "Compressing $DumpPath"); + my $Dir = getDirname($DumpPath); + my $Name = getFilename($DumpPath); + my @Cmd_C = ("tar", "-C", $Dir, "-czf", $DumpPath.".".$COMPRESS, $Name); + system(@Cmd_C); + + if($?) { + exitStatus("Error", "Can't compress ABI dump"); + } + else { + unlink($DumpPath); + } + } +} + sub createABIDump($) { my $V = $_[0]; @@ -1639,6 +1760,10 @@ my $ABIDir = $Dir."/".$Md5; my $ABIDump = $ABIDir."/ABI.dump"; + if(not $Profile->{"NoCompress"}) { + $ABIDump .= ".".$COMPRESS; + } + my $Cmd = $ABI_DUMPER." \"".$Object."\" -output \"".$ABIDump."\" -lver \"$V\""; if(not $Profile->{"PrivateABI"} @@ -1733,7 +1858,7 @@ $DB->{"ABIDump"}{$V}{$Md5}{"Path"} = $ABIDump; $DB->{"ABIDump"}{$V}{$Md5}{"Object"} = $RPath; - my $ABI = eval(readFile($ABIDump)); + my $ABI = eval(readDump($ABIDump)); $DB->{"ABIDump"}{$V}{$Md5}{"Lang"} = $ABI->{"Language"}; my $TotalSymbols = countSymbols($DB->{"ABIDump"}{$V}{$Md5}); @@ -3351,7 +3476,7 @@ $Content .= "<body>\n"; my @Rss = (); - my $RssLink = "$HomePage/tracker/timeline/$TARGET_LIB"; + my $RssLink = $HomePage."tracker/timeline/$TARGET_LIB"; my @Versions = getVersionsList(); @@ -3452,7 +3577,7 @@ $Content .= "<br/>"; $Content .= "<br/>"; - my $GraphPath = "graph/$TARGET_LIB/graph.png"; + my $GraphPath = "graph/$TARGET_LIB/graph.svg"; my $ShowGraph = (-f $GraphPath); my $ShowSponsor = (defined $In::Opt{"Sponsors"}); @@ -3928,7 +4053,7 @@ if($RightSide) { $Content .= "</td>\n"; - $Content .= "<td width='100%' valign='top' align='left' style='padding-left:2.5em;'>\n"; + $Content .= "<td width='100%' valign='top' align='left' style='padding-left:2em;'>\n"; if($ShowSponsor) { @@ -4188,7 +4313,7 @@ $Content .= "<div id='Note' style='display:none;visibility:hidden;'>\n"; $Content .= "<p/>\n"; $Content .= "<br/>\n"; - $Content .= "No info (<a href=\'$HomePage/?view=abi-tracker\'>add</a> a library)\n"; + $Content .= "No info (<a href=\'$HomePage?view=abi-tracker\'>add</a> a library)\n"; $Content .= "</div>\n"; } @@ -4348,6 +4473,10 @@ $Info{"Path"} = $Dir."/ABI.dump"; + if(-e $Info{"Path"}.".".$COMPRESS) { + $Info{"Path"} .= ".".$COMPRESS; + } + my $Meta = readProfile(readFile($Dir."/meta.json")); $Info{"Object"} = $Meta->{"Object"}; $Info{"Lang"} = $Meta->{"Lang"}; @@ -4631,7 +4760,7 @@ if($In::Opt{"TargetElement"}) { - if($In::Opt{"TargetElement"}!~/\A(date|dates|soname|changelog|abidump|abireport|rfcdiff|headersdiff|pkgdiff|packagediff|abiview|graph|objectsreport)\Z/) + if($In::Opt{"TargetElement"}!~/\A(date|dates|soname|changelog|abidump|abireport|rfcdiff|headersdiff|pkgdiff|packagediff|abiview|graph|objectsreport|compress)\Z/) { exitStatus("Error", "the value of -target option should be one of the following: date, soname, changelog, abidump, abireport, rfcdiff, pkgdiff."); } @@ -4788,6 +4917,10 @@ checkDB(); checkFiles(); + if($In::Opt{"CleanUnused"}) { + cleanUnused(); + } + if($In::Opt{"Build"}) { writeDB($DB_PATH); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abi-tracker-1.10/modules/Internals/Basic.pm new/abi-tracker-1.11/modules/Internals/Basic.pm --- old/abi-tracker-1.10/modules/Internals/Basic.pm 2017-06-18 06:57:58.000000000 +0200 +++ new/abi-tracker-1.11/modules/Internals/Basic.pm 2017-08-30 08:30:46.000000000 +0200 @@ -19,7 +19,6 @@ # If not, see <http://www.gnu.org/licenses/>. ################################################################## use strict; -use Time::Local; use POSIX qw(strftime); use Fcntl; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abi-tracker-1.10/modules/Internals/Styles/Common.css new/abi-tracker-1.11/modules/Internals/Styles/Common.css --- old/abi-tracker-1.10/modules/Internals/Styles/Common.css 2017-06-18 06:57:58.000000000 +0200 +++ new/abi-tracker-1.11/modules/Internals/Styles/Common.css 2017-08-30 08:30:46.000000000 +0200 @@ -28,7 +28,7 @@ } div.sponsor, div.become_sponsor { - padding-left:85px; + padding-left:80px; font-size:1.7em; font-weight:bold; color:#ACACAC; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abi-tracker-1.10/modules/Internals/Utils.pm new/abi-tracker-1.11/modules/Internals/Utils.pm --- old/abi-tracker-1.10/modules/Internals/Utils.pm 2017-06-18 06:57:58.000000000 +0200 +++ new/abi-tracker-1.11/modules/Internals/Utils.pm 2017-08-30 08:30:46.000000000 +0200 @@ -39,7 +39,7 @@ if($Styles) { - $CommonStyles = "<link rel=\"stylesheet\" type=\"text/css\" href=\"$TopDir/css/$CommonStyles?v=1.2.1\" />"; + $CommonStyles = "<link rel=\"stylesheet\" type=\"text/css\" href=\"$TopDir/css/$CommonStyles?v=1.3\" />"; $Styles = "<link rel=\"stylesheet\" type=\"text/css\" href=\"$TopDir/css/$Styles?v=1.1.1\" />"; }