#! /usr/bin/perl -sw

# Created by Steve Voisey (srv) 14 May 2012.
# email: [steve.voisey@ericsson.com]
# releaseVersion.pl - V1.002

use File::Basename;

my ($projectMan, $customerMan, $cmsVersionMan, $versionMan, $revisionMan, $typeMan, $manifestFile) = "";

my $divide = "=" x 60 . "\n";
my @man = ();
my $hostname = `hostname`;
  
  
# Implement new 'release' type manifest for release versions.
# Enables us to deploy patches as well as a full release.
### @man = </opt/tandbergtv/cms/scripts/install/*.release.MANIFEST>;

# Also support the old format naming for the manifest file for backwards compatibility.
### if ( @man < 1 ) { @man = </opt/tandbergtv/cms/scripts/install/*.MANIFEST>; }

# Second thoughts, lets always process any MANIFEST found, but now print name of file.
@man = </opt/tandbergtv/cms/scripts/install/*.MANIFEST>;
@man = reverse sort(@man);

if ( @man > 1 )  {
    print "\n";
    print "INFO: Multiple manifest files. [*.MANIFEST]\n";
    print "      Each file will be processed.\n\n";
    #foreach $line (@man) { print "         $line\n"; }
    #print "\n";
}

if ( @man == 0 ) {
    print "\nERROR: No manifest file found! [*.MANIFEST]\n";
    exit;
}
 
foreach $manifestFile (@man) {   
    
    getManifest($manifestFile, \$projectMan, \$customerMan, \$cmsVersionMan, \$versionMan, \$revisionMan, \$typeMan);
    @rpmFiles   = getFileFromManifest($manifestFile, "rpm");

    # ${projectMan} ${cmsVersionMan}
    
    if(defined(${customerMan})) {
        print "\n${divide}";
        print "${customerMan} ${typeMan} Version ${versionMan}-${revisionMan}\n";
        if ( @man > 1 )  { print "  " . fileparse($manifestFile) . "\n"; }
        print "${divide}";
    }

    rpmQuery( \@rpmFiles );
    print "\n";
}

exit;

##################################################################################
##################################################################################

sub rpmQuery {
    my $rpmFilesRef = $_[0];

    foreach $rpm (@$rpmFilesRef) {
        ($rpmName) = $rpm =~ /(.*)-.*-.*\.rpm/;
         print `rpm -qv $rpmName`;
    }
}

##################################################################################
##################################################################################

sub getFileFromManifest {
    my $manifestFile = $_[0];
    my $type         = $_[1];

    my $kitFile   = "";
    my $line = "";
    my @man = ();
    my @manArray = ();
    my @fileArray = ();

    unless (open (MAN, "<$manifestFile"))   { die "cannot open $manifestFile $!"; }
    @manArray   = <MAN>;
    close MAN;

    foreach $line (@manArray) {
        chomp ($line);
        unless ( $line =~ /^md5sum:/ ) { next; }
        $line =~ s/\s+/ /g;

        @tmp = split(" ",$line,4);
        $kitFile   = $tmp[3];
        if ( $kitFile =~ /\.$type/ ) { push(@fileArray, "$kitFile"); }
    }
    return @fileArray;
}

##################################################################################
##################################################################################

sub getManifest {
    my $manifestFile  = $_[0];
    my $projectRef    = $_[1];
    my $customerRef   = $_[2];
    my $cmsVersionRef = $_[3];
    my $versionRef    = $_[4];
    my $revisionRef   = $_[5];
    my $typeRef       = $_[6];

    my $kitFile   = "";
    my $line = "";
    my $version = "";
    my $revision = "";

    my @manArray = ();

    unless (open (MAN, "<$manifestFile"))   { die "cannot open $manifestFile $!"; }
    @manArray   = <MAN>;
    close MAN;

    foreach $line (@manArray) {
        chomp ($line);
        $_ = $line;
        if ( /^Customer:/ )         { ($$customerRef)   = /^Customer:\s+(.*?)\s*$/;        chomp($$customerRef); next; }
        if ( /^Project:/ )          { ($$projectRef)    = /^Project:\s+(.*?)\s*$/;         chomp($$projectRef); next; }
        if ( /^Type:/ )             { ($$typeRef )     = /^Type:\s+(.*)\s*$/;              chomp($$typeRef); next; }
        if ( /^CMS Version:/ )      { ($$cmsVersionRef) = /^CMS Version:\s+(.*?)\s*$/;     chomp($$cmsVersionRef); next; }
        if ( /^Project Version:/ )  { ($$versionRef)    = /^Project Version:\s+(.*)\s*$/;  chomp($$versionRef); next; }
        if ( /^Project Revision:/ ) { ($$revisionRef)   = /^Project Revision:\s+(.*)\s*$/; chomp($$revisionRef); next; }
    }
    return;
}

##################################################################################
##################################################################################

# Finish
