Updated release notes generation:
Added copyright message
Proper command line parsing
Usage message if inputs are not right
Added explanatory preamble to output
"NEW" FCLs are marked as such
Merge changesets are included in output
#! 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 $mirror = 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 @mirroropt = ();
@mirroropt = "-mirror" if ($mirror);
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,@mirroropt,"-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);