| #************************************************************** |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| #************************************************************** |
| # |
| # checknewapi - a perl script to check for new API's |
| # using two outputs from regview and dump the interscetion |
| # of new types |
| # |
| |
| 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; |