From dd8947c16c2a83dc09d6bb2255e2329f3dec5c13 Mon Sep 17 00:00:00 2001 From: Mercier Pierre-Olivier Date: Tue, 11 Jun 2013 19:29:43 +0200 Subject: [PATCH] Common script for checking version --- common/new_version.pl | 132 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 common/new_version.pl diff --git a/common/new_version.pl b/common/new_version.pl new file mode 100644 index 0000000..15d0d92 --- /dev/null +++ b/common/new_version.pl @@ -0,0 +1,132 @@ +#! /usr/bin/env perl + +use v5.10.1; +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use XML::LibXML; + +# Parse arguments +my $input; my $current; my $output; my $version; my $next; +my $help; my $man; +GetOptions ("output|O=s" => \$output, + "current|c=s" => \$current, + "version|V=i" => \$version, + "next|n=i" => \$next, + "help|h|?" => \$help, + "man" => \$man, + "" => \$input) + or pod2usage(2); +pod2usage(1) if $help; +pod2usage(-exitval => 0, -verbose => 2) if $man; + +# Get the current version +if (defined $current && defined $version) { + say "Error: Cannot have both -current and -version, choose the one!"; + pod2usage(1); +} +elsif (defined $current) { + open my $xmlcur, "<", $current or die $!; + binmode $xmlcur; + my $dom = XML::LibXML->load_xml(IO => $xmlcur); + close $xmlcur; + + $version = $dom->documentElement()->getAttribute("version"); +} + +if(defined $next) { + $version = $next; +} +elsif (!$version) { + say "Warning: Assume this is the first version."; + $version = 1; +} +else { + $version += 1; +} + +# Open versioned XML file +my $xmlin; +if (defined $input || $#ARGV == -1) { + $xmlin = *STDIN; +} +else { + open $xmlin, "<", $ARGV[0] or die $!; +} + +binmode $xmlin; +my $dom = XML::LibXML->load_xml(IO => $xmlin); +close $xmlin unless $xmlin eq *STDIN; + +# Check the version +my $my_version = $dom->documentElement()->getAttribute("version"); +if (!defined $my_version || $my_version < $version) { + $dom->documentElement()->setAttribute("version", $version); +} + +# Save versioned XML file +my $xmlout; +if (defined $output) { + open $xmlout, '>', $output; + binmode $xmlout; +} +else { + $xmlout = *STDOUT; +} +print {$xmlout} $dom->toString(); +close $xmlout unless $xmlout eq *STDOUT; + +__END__ + +=head1 NAME + +new_version.pl - Check if the new file version is greater than current file version + +=head1 SYNOPSIS + +new_version.pl [options] [file] + +=head1 DESCRIPTION + +Parse the XML file given (or stdin if no file is given) and print a valid versionned XML with a valid version (strictly greater than current version) + + Options: + -output=file.xml save prepared XML to this location + -current=file.xml location of the current XML file + -version=X raw version to use at least + -next=X next version to be used + -help brief help message + -man full documentation + +=head1 OPTIONS + +=over 8 + +=item B<-output=file.xml> + +Save the prepared XML to a file instead of printing it on standard output. + +=item B<-current=file.xml> + +Path to the current XML file, where extract the current version. + +=item B<-version=X> + +The last known version. Used when you haven't the file. + +=item B<-next=X> + +The version to write into the file. + +=item B<-help> + +Print a brief help message and exits. + +=item B<-man> + +Prints the manual page and exits. + +=back + +=cut