author | Arnaud Lenoir |
Wed, 07 Oct 2009 16:50:31 +0100 | |
changeset 90 | e45faf323a50 |
parent 55 | 7b39c2ae2526 |
child 158 | 27cf0a88d449 |
permissions | -rw-r--r-- |
#! perl -w # Copyright (c) 2009 Symbian Foundation Ltd # This component and the accompanying materials are made available # under the terms of the License "Eclipse Public License v1.0" # which accompanies this distribution, and is available # at the URL "http://www.eclipse.org/legal/epl-v10.html". # # Initial Contributors: # Symbian Foundation Ltd - initial contribution. # # Contributors: # # Description: # use strict; use Getopt::Long; use FindBin; #my $churn_core = "D:\\mirror\\churn_core.pl"; my $churn_core = "$FindBin::Bin\\churn_core.pl"; my $churn_output_temp = "$FindBin::Bin\\fbf_churn_output"; mkdir $churn_output_temp; my $path = $FindBin::Bin; $path =~ s/\//\\/g; my $clone_packages = "$path\\..\\clone_packages\\clone_all_packages.pl"; sub Usage($) { my ($msg) = @_; print "$msg\n\n" if ($msg ne ""); print <<'EOF'; fbf_churn.pl - simple script for calculating code churn in between two revisions or labels for a package. This script can also be used to calculate code size for a package. When used without a package name or filter, this script runs for all the packages in the BOM (build-info.xml) file supplied to it. Important: This script uses clone_all_packages.pl which clones all repositories listed in the BOM or pull changes into a previously cloned repository. This script uses its accompayning script churn_core.pl - which should be present in the same directory as this script. Limitations: If a BOM is not supplied to the script using the -bom option, then the script runs on the package locations inside both MCL and FCL producing two results for a single package. For running the script for calculating code churn between two release buils (using labels) or for calculating code size for a release build, it is essential that a BOM (preferably for the newer build) is passed as an argument using the -bom option. Options: -o --old old revision or label for a package/respoitory -n --new new revision or label for a package/respoitory --rev revision for package/respoitory - Use this while calculating code size for a single package --label revision tag for package or release build - Use this while calculating code size -bom --bom build-info.xml files supplied with Symbian PDKs -verbose print the underlying "clone_all_packages" & "hg" commands before executing them -help print this help information -package <RE> only process repositories matching regular expression <RE> -filter <RE> only process repositories matching regular expression <RE> EOF exit (1); } print "\n\n==Symbian Foundation Code Churn Tool v1.0==\n\n"; my $old = "null"; my $new = ""; my $filter = ""; my $codeline = ""; my $package = ""; my $licence = ""; my $packagelist = ""; my $verbose = 0; my $help = 0; sub do_system { my (@args) = @_; print "* ", join(" ", @args), "\n" if ($verbose); return system(@args); } # Analyse the command-line parameters if (!GetOptions( "n|new-rev|new-label|label|rev=s" => \$new, "o|old-rev|old-label=s" => \$old, "f|filter=s" => \$filter, "p|package=s" => \$filter, "cl|codeline=s" => \$codeline, "li|licence=s" => \$licence, "bom|bom=s" => \$packagelist, "v|verbose" => \$verbose, "h|help" => \$help, )) { Usage("Invalid argument"); } Usage("") if ($help); Usage("Too few arguments....use at least one from -n|new-rev|new-label|label|rev or -bom") if ($new eq "" && $packagelist eq ""); #Usage("Too many arguments") if ($new ne "" && $packagelist ne ""); if ($old eq 'null') { print "\nCode size calculation....\n"; } else { print "\nCode churn calculation....\n"; } my @packagelistopts = (); @packagelistopts = ("-packagelist", $packagelist) if ($packagelist ne ""); my @verboseopt = (); @verboseopt = "-v" if ($verbose); my $new_rev = $new; $new_rev = "%REV%" if ($new_rev eq ""); #TO_DO: Locate clone_all_packages relative to the location of this script. #TO_DO: Remove references to absolute paths, change to relative paths. do_system($clone_packages,@verboseopt,"-mirror","-filter","$licence.*$codeline.*$filter",@packagelistopts,"-exec","--", "hg","--config","\"extensions.hgext.extdiff=\"","extdiff","-p",$churn_core,"-o",$churn_output_temp, "-r","$old","-r","$new_rev"); exit(0);