# # checknewapi - a perl script to check for new API's # using two outputs from regview and dump the interscetion # of new types # # Copyright (c) 2005 Sun Microsystems, Inc. # if($#ARGV != 2) { die "usage: checknewapi \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"; # debug flag $DEBUG = 0; $main::buildinfo = "$ARGV[2]"; %{$main::reftypes} = (); %{$main::currenttypes} = (); %{$main::removedtypes} = (); open ( FILEIN, "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 () { 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, "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 () { 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;