diff -r becbd829b411 -r f914b0494f03 envinfo/envinfo.pl --- a/envinfo/envinfo.pl Thu Jun 03 14:05:16 2010 +0100 +++ b/envinfo/envinfo.pl Fri Jun 04 16:09:17 2010 +0100 @@ -11,31 +11,108 @@ # Dario Sestito # # Description: -# Dumps environment info such as tools version to cmdline or optionally to a Diamonds file +# Dumps environment info such as tools version to cmdline and/or to a file use strict; use Getopt::Long; -my $output = "\\output\\logs\\diamonds_envinfo.xml"; -my $diamonds = 0; +my $report; +my $output = "\\output\\logs\\envinfo.txt"; +my $compare; +my $baseline = "\\build_info\\logs\\envinfo.txt"; my $help = 0; GetOptions(( - 'diamonds!' => \$diamonds, - 'out=s' => \$output, + 'report:s' => \$report, + 'compare:s' => \$compare, 'help!' => \$help )); +$output = $report if ($report); +$baseline = $compare if ($compare); + if ($help) { - print "Dumps environment info such as tools version to cmdline or optionally to a Diamonds file\n"; - print "Usage: perl envinfo.pl [-d [-o XMLFILE]]\n"; - print "\n"; - print "-d,--diamonds\tcreate Diamonds file with environment info\n"; - print "-o,--out XMLFILE Diamonds file to write to (default \\output\\logs\\diamonds_envinfo.xml)\n"; + print "Dumps environment info such as tools version to cmdline and/or to a file\n"; + print "Usage: perl envinfo.pl [OPTIONS]\n"; + print "where OPTIONS are:\n"; + print "-r,--report [FILE]\tCreate report file (default \\output\\logs\\envinfo.txt)\n"; + print "-c,--compare [LOCATION]\tCompare environment with info at LOCATION (default \\output\\logs\\envinfo.txt)\n"; exit(0); } +my $baseline_environment_info = {}; +if (defined $compare) +{ + my $target = ''; + my $tmp_file = ''; + # understand where we should get the info from + $target = $baseline if (-f $baseline); + $target = "$baseline\\envinfo.txt" if (!$target && -f "$baseline\\envinfo.txt"); + $target = "$baseline\\build_info\\logs\\envinfo.txt" if (!$target && -f "$baseline\\build_info\\logs\\envinfo.txt"); + $target = "$baseline\\build_BOM.zip" if (!$target && -f "$baseline\\build_BOM.zip"); + if (!$target) + { + warn "WARNING: Can't find envinfo.txt from location '$baseline'\n"; + } + elsif ($target =~ /\.zip$/) + { + print "Extracting envinfo.txt from $target\n"; + my $cmd = "7z e -y $target build_info\logs\envinfo.txt"; + my $output = `$cmd 2>&1`; + if ($output =~ /is not recognized as an internal or external command/) + { + $target = ''; + warn "WARNING: You need to have 7z in the PATH if you want to do comparison against a compressed baseline\n"; + } + elsif ($output =~ /No files to process/) + { + $target = ''; + warn "WARNING: The compressed baseline doesn't seem to contain an envinfo.txt file\n"; + } + else + { + my $tmp_file = "tmp$$.txt"; + system("ren envinfo.txt $tmp_file"); + $target = $tmp_file; + } + } + + if (!$target) + { + warn "WARNING: Will not do comparison\n"; + $compare = undef; + } + else + { + print "Will compare environment info to $target\n"; + + if (open(BASEINFO, $target)) + { + for my $line () + { + if ($line =~ /([^\t]*)\t([^\t]*)/) + { + my $name = $1; + my $version = $2; + chomp $name; + chomp $version; + $baseline_environment_info->{$name}=$version; + } + } + close(BASEINFO); + unlink $tmp_file if ($tmp_file); + } + else + { + warn "WARNING: Could not open file $target for reading. Will not do comparison\n"; + $compare = undef; + } + } + +} + + my @environment_info = (); # Machine name @@ -159,43 +236,84 @@ $java_ver = $1 if ($java_out =~ /^java version (.*)/m); push @environment_info, {name=>'java', version=>$java_ver}; +# change tabs to spaces for my $tool_info (@environment_info) { - print $tool_info->{name} . ": " . $tool_info->{version} . "\n"; + $tool_info->{name} =~ s/\t/ /g; + $tool_info->{version} =~ s/\t/ /g; } +print "\nTools breakdown\n"; -# write diamonds file -if ($diamonds) +my $cmp_notpresent = 0; +my $cmp_diffver = 0; +for my $tool_info (@environment_info) { - @environment_info = reverse(@environment_info); + print " " . $tool_info->{name} . ": " . $tool_info->{version}; - my $xml_content = <<_EOX; - - - 10 - -_HERE_TOOLS_LINES_ - - -_EOX - - my $tools_lines = ''; - for my $tool_info (@environment_info) + if (defined $compare && + $tool_info->{name} ne 'Machine' && + $tool_info->{name} ne 'OS Name') { - $tools_lines .= " $tool_info->{name}$tool_info->{version}\n"; + print "\t"; + if (defined $baseline_environment_info->{$tool_info->{name}}) + { + my $baselineversion = $baseline_environment_info->{$tool_info->{name}}; + if ($tool_info->{version} eq 'N.A.' && $baselineversion ne 'N.A.') + { + print "[ERROR: tool not present]"; + $cmp_notpresent++; + } + elsif ($tool_info->{version} eq $baselineversion || $baselineversion eq 'N.A.') + { + print "[OK]"; + } + elsif ($tool_info->{version} cmp $baselineversion < 0) + { + print "[WARNING: less recent than baseline]"; + $cmp_diffver++; + } + elsif ($tool_info->{version} cmp $baselineversion > 0) + { + print "[WARNING: more recent than baseline]"; + $cmp_diffver++; + } + } } - - $xml_content =~ s/_HERE_TOOLS_LINES_/$tools_lines/; - - if (open(ENVINFO, ">$output")) + print "\n"; +} + +print "\n"; + +if (defined $compare) +{ + print "Summary of comparison to baseline:\n"; + if ($cmp_notpresent || $cmp_diffver) { - print ENVINFO $xml_content; - close(ENVINFO); - print "Wrote Diamonds file: $output\n"; + print " Tools not present or not found in the expected location: $cmp_notpresent\n"; + print " Tools at different version: $cmp_diffver\n"; } else { - warn "Could not write to file: $output\n"; + print " All tools seem to match the baseline :-)\n"; + } + print "\n"; +} + +# write report file +if (defined $report) +{ + if (open(ENVINFO, ">$output")) + { + for my $tool_info (@environment_info) + { + print ENVINFO "$tool_info->{name}\t$tool_info->{version}\n"; + } + close(ENVINFO); + print "Wrote report file: $output\n"; + } + else + { + warn "WARNING: Could not write to file: $output\n"; } } \ No newline at end of file