Inca::Reporter::Version - Convenience module for creating version reporters
use Inca::Reporter::Version;
my $reporter = new Inca::Reporter::Version();
my $command = 'somecommand -version';
my $pattern = '^version "(.*)"';
...
$reporter->setPackageName('packageX');
$reporter->setVersionByExecutable($command, $pattern);
$reporter->print();
or
$reporter->setVersionByGptQuery('packageX');
or
$reporter->setVersionByRpmQuery('packageX');
or
$reporter->setPackageVersion('x.x.x');
or
foreach my $subpackage(@subpackages) {
$reporter->setSubpackageVersion($subpackage, $version);
}
This module is a subclass of Inca::Reporter which provides convenience methods for creating version reporters. A version reporter reports the version information for a package in the following schema (i.e., this is the body of the Inca report):
<packageVersion>
<ID>packageX</ID>
<version>x.x.x</version>
</packageVersion>
or
<packageVersion>
<ID>packageX</ID>
<subpackage>
<ID>subpackageX</ID>
<version>x.x.x</version>
</subpackage>
<subpackage>
<ID>subpackageY</ID>
<version>x.x.x</version>
</subpackage>
</packageVersion>
Version information can be set using one of the basic methods setPackageVersion (for the first example) or setSubpackageVersion (for the second). In this case, the user retrieves a package's version information directly and uses one of these two methods to report it. This module also provides convenience methods that retrieve a package version using conventional methods of querying version information.
Class constructor which returns a new Inca::Reporter::Version object. The constructor supports the following parameters in addition to those supported by Inca::Reporter.
the name of the package for which a version is being determined; default ''.
the version of the package.
Returns the name of the package
Returns the version of the package
Returns an array of all the names of all subpackages with a set version
Returns the version of subpackage $name
Constructs and returns the body of the reporter.
Set the name of the package.
Report the version of a package as $version.
Report the version of subpackage $name as $version.
Retrieve the package version by compiling and running a program and matching its output against a pattern. Returns 1 if successful, else 0. The function recognizes the following parameter in addition to those supported by the compiledProgramOutput method of Inca::Reporter: parameters:
pattern to search for in program output; default '(.+)'
Retrieve package version information by executing $command and greping the output for $pattern. $command is the executable and argument string to retrieve the version (e.g., command_name -version) and $pattern is a pattern containing one grouping (i.e., memory parentheses) to retrieve the version from the output. $pattern defaults to '([\d\.]+)' if not specified. Fails if $timeout is specified and $command does not complete within $timeout seconds. Returns 1 if successful, else 0.
Retrieve the package version by grep'ing the file $path for $pattern. $pattern defaults to '([\d\.]+)' if not specified. Returns 1 if successful, else 0.
Set subpackage version information by querying GPT for packages prefixed with any element of @prefixes. Returns 1 if successful, else 0.
Set subpackage version information by querying GPT for packages that contain the regular expression $pattern. Returns 1 if successful, else 0.
The following example demonstrates the usage of setVersionByGptQuery:
my $reporter = new Inca::Reporter::Version(
name => 'grid.middleware.globus.version',
version => 1.25,
description => 'Reports globus package versions',
url => 'http://www.globus.org',
package_name => 'globus'
);
$reporter->processArgv(@ARGV);
$reporter->setVersionByGptQuery('globus');
$reporter->print();
The following example demonstrates the usage of setVersionByRpmQuery:
my $reporter = new Inca::Reporter::Version(
name => 'cluster.compiler.gcc.version',
version => 1.25,
description => 'Reports the version of gcc',
url => 'http://gcc.gnu.org',
package_name => 'gcc'
);
$reporter->processArgv(@ARGV);
$reporter->setVersionByRpmQuery('gcc');
$reporter->print();
The following example demonstrates the usage of setVersionByExecutable:
my $command = "java -version";
my $pattern = '^java version \"(.*)\"[.\n]*';
my $reporter = new Inca::Reporter::Version(
name => 'cluster.java.sun.version',
version => 1.25,
description => 'Reports the version of java in the user\'s path',
url => 'http://java.sun.com',
package_name => 'java'
);
$reporter->processArgv(@ARGV);
$reporter->setVersionByExecutable($command, $pattern);
$reporter->print();
Shava Smallen <ssmallen@sdsc.edu>