#!perl
# Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
# All rights reserved.
# 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:
# Nokia Corporation - initial contribution.
# 
# Contributors:
# 
# Description:
# 
#

use strict;
use FindBin;
use lib "$FindBin::Bin";
use Getopt::Long;
use IniData;
use RelData;
use EnvDb;
use Utils;
use CommandController;


#
# Globals.
#

my $verbose = 0;
my $iniData = IniData->New();
my $commandController = CommandController->New($iniData, 'EnvSize');
my $comp;
my $ver;
my $quick;
my $force;
my $deltasize = 0;

#
# Main.
#

ProcessCommandLine();

my $envdb = EnvDb->Open($iniData, $verbose);
$ver = $envdb->Version($comp) if (!$ver);

EnvSize();


#
# Subs.
#

sub ProcessCommandLine {
  Getopt::Long::Configure ("bundling");
  my $help;
  GetOptions("h" => \$help, "v+" => \$verbose, "q" => \$quick, 'f' => \$force, "d" => \$deltasize);

  if ($help) {
    Usage(0);
  }

  if ($quick && $deltasize) {
    die "Error: It is not possible to use the -d and -q flags together\n";
  }

  $comp = shift @ARGV;
  unless ($comp) {
    die "Error: No component name specified\n";
  }
  if (scalar @ARGV == 1) {
    $ver = shift @ARGV;
  }
  elsif (!scalar @ARGV == 0) {
    print "Error: Invalid number of arguments\n";
    Usage(1);
  }
}

sub Usage {
  my $exitCode = shift;

  Utils::PrintDeathMessage($exitCode, "\nUsage: envsize [options] <component> <version>

options:

-h  help
-v  verbose output (-vv very verbose)
-f  (deprecated)
-q  quick (don't print size of environment)
-d  delta size (only matching versions)
  
Note: It is not possible to use the -q and -d flags together.\n");
}

sub EnvSize {
  print "Size of component zips in local archive: ".$envdb->GetReleaseSize($comp, $ver)." bytes\n";
  print "Size of whole environment zips in local archive: ".$envdb->GetEnvironmentSize($comp, $ver, 0)." bytes\n" if (!$quick && !$deltasize);
  print "Size of environment zips in local archive that match the requested version: ".$envdb->GetEnvironmentSize($comp, $ver, $deltasize)." bytes\n" if (!$quick && $deltasize);
}

__END__

=head1 NAME

EnvSize - Prints the size of the zip files of the component and its environment.

=head1 SYNOPSIS

  envsize [options] component [version]

options:

  -h  help
  -v  verbose output (-vv very verbose)
  -q  quick; only print the size of the component, not its environment
  -d  delta size; only includes components that match the requested version

Note: It is not possible to use the C<-q> and C<-d> flags together.

=head1 DESCRIPTION

Adds up the size of the zip files of the component. The result is printed,
in bytes.

Unless you specify the C<-q> flag, it also adds up the sizes of all the
components that make up its environment, and prints that. (This, of course,
includes the component you specify).

If you specify the C<-d> flag it will add up the sizes of all the components in
the archive that match the version number specified.  This is useful if when you
create an environment you use the same version number for all new components,
you can see the size taken up by the components released in the new
environment, and not components which have been re-used.

The first item of information is also shown in the output of C<viewnotes>.

=head1 STATUS

Supported. If you find a problem, please report it to us.

=head1 KNOWN BUGS

None.

=head1 COPYRIGHT

 Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
 All rights reserved.
 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:
 Nokia Corporation - initial contribution.
 
 Contributors:
 
 Description:
 

=cut
