198 lines
5.4 KiB
Perl
Executable file
198 lines
5.4 KiB
Perl
Executable file
#
|
|
# checknewapi - a perl script to check for new API's
|
|
# using two outputs from regview and dump the interscetion
|
|
# of new types
|
|
#
|
|
# Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
#
|
|
|
|
if($#ARGV != 3)
|
|
{
|
|
die "usage: checknewapi <new_type_library> <reference_type_library> <buildinfodescr> <fullpath_regview>\n";
|
|
}
|
|
|
|
-e "$ARGV[0]" || die "ERROR: type library \"$ARGV[0]\" does not exist\n";
|
|
-e "$ARGV[1]" || die "ERROR: reference type library \"$ARGV[1]\" does not exist\n";
|
|
-e "$ARGV[3]" || die "ERROR: invalid path to the regview tool \"$ARGV[3]\", please specify the full qualified path\n";
|
|
|
|
# debug flag
|
|
$DEBUG = 0;
|
|
|
|
$main::buildinfo = "$ARGV[2]";
|
|
$main::regview = "$ARGV[3]";
|
|
%{$main::reftypes} = ();
|
|
%{$main::currenttypes} = ();
|
|
%{$main::removedtypes} = ();
|
|
|
|
open ( FILEIN, "$main::regview \"$ARGV[0]\" |" ) || die "could not use content of current typelibrary \"$ARGV[0]\", regview doesn't work\n";
|
|
|
|
if ($DEBUG == 1)
|
|
{
|
|
open( CURRENT, ">current_types.txt" ) || die "\nERROR: could not open current_types.txt for writing";
|
|
}
|
|
|
|
$first = 1;
|
|
$linebefore = "";
|
|
$published = 0;
|
|
$typeclass = "";
|
|
while (<FILEIN>)
|
|
{
|
|
if ($first == 0)
|
|
{
|
|
if ( $linebefore =~ m#type class: published (.+)# )
|
|
{
|
|
$published = 1;
|
|
$typeclass = $1;
|
|
} elsif ( $linebefore =~ m#type class: (.+)# )
|
|
{
|
|
$published = 0;
|
|
$typeclass = $1;
|
|
} else
|
|
{
|
|
$published = 0;
|
|
$typeclass = "";
|
|
}
|
|
} else
|
|
{
|
|
$first = 0;
|
|
}
|
|
|
|
if ( (!$typeclass eq "") && ($_ =~ m# *type name: \"([^\[.]+)\"#) )
|
|
{
|
|
if ($DEBUG == 1)
|
|
{
|
|
print CURRENT "$1\n";
|
|
}
|
|
if ( ! exists $main::currenttypes->{$1} )
|
|
{
|
|
$main::currenttypes->{$1} = { PUBLISHED => $published,
|
|
TYPECLASS => $typeclass,
|
|
COUNT => 1 };
|
|
# print "### $main::currenttypes->{$1}->{PUBLISHED} $main::currenttypes->{$1}->{TYPECLASS} $main::currenttypes->{$1}->{COUNT}\n";
|
|
}
|
|
}
|
|
$linebefore = $_;
|
|
}
|
|
close( FILEIN );
|
|
close( CURRENT );
|
|
|
|
open ( FILEIN, "$main::regview \"$ARGV[1]\" |" ) || die "could not use content of reference type library \"$ARGV[1]\", regview doesn't work\n";
|
|
|
|
if ($DEBUG == 1)
|
|
{
|
|
open( REFERENCE, ">reference_types.txt" ) || die "\nERROR: could not open reference_types.txt for writing";
|
|
}
|
|
|
|
# reset variables
|
|
$first = 1;
|
|
$linebefore = "";
|
|
$published = 0;
|
|
$typeclass = "";
|
|
while (<FILEIN>)
|
|
{
|
|
if ($first == 0)
|
|
{
|
|
if ( $linebefore =~ m#type class: published (.+)# )
|
|
{
|
|
$published = 1;
|
|
$typeclass = $1;
|
|
} elsif ( $linebefore =~ m#type class: (.+)# )
|
|
{
|
|
$published = 0;
|
|
$typeclass = $1;
|
|
} else
|
|
{
|
|
$published = 0;
|
|
$typeclass = "";
|
|
}
|
|
} else
|
|
{
|
|
$first = 0;
|
|
}
|
|
|
|
if ( (!$typeclass eq "") && ($_ =~ m# *type name: \"([^\[.]+)\"#) )
|
|
{
|
|
if ($DEBUG == 1)
|
|
{
|
|
print REFERENCE "$1\n";
|
|
}
|
|
if ( ! exists $main::reftypes->{$1} )
|
|
{
|
|
$main::reftypes->{$1}++;
|
|
|
|
if ( exists $main::currenttypes->{$1} )
|
|
{
|
|
$main::currenttypes->{$1}->{COUNT}++;
|
|
# print "###### $main::currenttypes->{$1}->{PUBLISHED} $main::currenttypes->{$1}->{TYPECLASS} $main::currenttypes->{$1}->{COUNT}\n";
|
|
} else
|
|
{
|
|
if ($published == 0)
|
|
{
|
|
$main::removedtypes->{$1} = { PUBLISHED => $published,
|
|
TYPECLASS => $typeclass };
|
|
} else
|
|
{
|
|
print "ERROR: type $1 is only in reference type library, this can't be happen\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$linebefore = $_;
|
|
}
|
|
close( FILEIN );
|
|
close( REFERENCE );
|
|
|
|
|
|
@typekeys = keys %{$main::currenttypes};
|
|
$allunotypes = $#typekeys+1;
|
|
$newunotypes = 0;
|
|
$newpublished = 0;
|
|
$draftscount = 0;
|
|
$draftspublished = 0;
|
|
foreach $i ( sort @typekeys )
|
|
{
|
|
if ( $main::currenttypes->{$i}->{COUNT} == 1 &&
|
|
!("$main::currenttypes->{$i}->{TYPECLASS}" eq "module"))
|
|
{
|
|
$newunotypes++;
|
|
my $t = $i;
|
|
$t =~ s#/#\.#go;
|
|
if ($main::currenttypes->{$i}->{PUBLISHED} == 1)
|
|
{
|
|
print "published ";
|
|
$newpublished++;
|
|
}
|
|
if ( $t =~ m#drafts\.com.+#)
|
|
{
|
|
$draftscount++;
|
|
if ($main::currenttypes->{$i}->{PUBLISHED} == 1)
|
|
{
|
|
$draftspublished++;
|
|
}
|
|
}
|
|
print "$main::currenttypes->{$i}->{TYPECLASS} = $t\n";
|
|
}
|
|
}
|
|
|
|
# count removed not yet published types
|
|
$removednotpublished = 0;
|
|
|
|
@removedtypekeys = keys %{$main::removedtypes};
|
|
foreach $i ( sort @removedtypekeys )
|
|
{
|
|
$removednotpublished++;
|
|
my $t = $i;
|
|
$t =~ s#/#\.#go;
|
|
print "removed not yet published $main::currenttypes->{$i}->{TYPECLASS} = $t\n";
|
|
}
|
|
|
|
print "\n=======================================================\n\n";
|
|
print "Summary [last check for $main::buildinfo]:\n\n";
|
|
print "Number of UNO types = $allunotypes\n";
|
|
print "Number of new UNO types = $newunotypes\n";
|
|
print "New and published types = $newpublished\n";
|
|
print "New and draft types = $draftscount\n";
|
|
print "New, draft and published = $draftspublished\n";
|
|
print "Removed and not published = $removednotpublished\n";
|
|
|
|
exit 0;
|