From b1d81d72f48b60e7568f4c61e2d14244acd51e32 Mon Sep 17 00:00:00 2001 From: CrawfordCurrie Date: Fri, 6 Mar 2009 09:14:40 +0000 Subject: [PATCH] Item1209: Item1210: merge from Release01x00 git-svn-id: http://svn.foswiki.org/trunk@2899 0b4bb1d4-4e5a-0410-9cc4-b2b747904278 --- BuildContrib/lib/Foswiki/Contrib/Build.pm | 16 ++++++++++------ core/lib/Foswiki/Configure/UIs/EXTENSIONS.pm | 16 ++++++++-------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/BuildContrib/lib/Foswiki/Contrib/Build.pm b/BuildContrib/lib/Foswiki/Contrib/Build.pm index 5cfe023ae2..0845d9e532 100644 --- a/BuildContrib/lib/Foswiki/Contrib/Build.pm +++ b/BuildContrib/lib/Foswiki/Contrib/Build.pm @@ -468,6 +468,8 @@ sub _loadDependenciesFrom { close(PF); } +# SMELL: Would be good to change this to use SVN::Client, but Sven warns us +# that SVN::Client doesn't work in most places :-(. Maybe some day. sub _get_svn_version { my $this = shift; @@ -496,10 +498,9 @@ sub _get_svn_version { my $maxd = 0; eval { my $log = $this->sys_action( 'svn', 'info', @files ); - my $getDate = 0; foreach my $line ( split( "\n", $log ) ) { - if ( $line =~ /^Last Changed Rev: (.*)$/ ) { + if ( $line =~ /^Last Changed Rev: (\d+)/ ) { $getDate = 0; if ( $1 > $max ) { $max = $1; @@ -507,19 +508,22 @@ sub _get_svn_version { } } elsif ($getDate - && $line =~ /^Text Last Updated: (.*?) (.*) \(/m ) + && $line =~ /^Text Last Updated: ([\d-]+) ([\d:]+) ([-+\d]+)?/m ) { - $maxd = Foswiki::Time::parseTime("$1T$2"); + $maxd = Foswiki::Time::parseTime("$1T$2".($3||'')); $getDate = 0; } elsif ($getDate - && $line =~ /Last Changed Date: (.*?) (.*) \(/m ) + && $line =~ /Last Changed Date: ([\d-]+) ([\d:]+) ([-+\d]+)?/m ) { - $maxd = Foswiki::Time::parseTime("$1T$2"); + $maxd = Foswiki::Time::parseTime("$1T$2".($3||'')); $getDate = 0; } } }; + if ($@) { + print STDERR "WARNING: Failed to shell out to svn: $@"; + } $this->{DATE} = Foswiki::Time::formatTime( $maxd, '$iso', 'gmtime' ); my $day = $this->{DATE}; diff --git a/core/lib/Foswiki/Configure/UIs/EXTENSIONS.pm b/core/lib/Foswiki/Configure/UIs/EXTENSIONS.pm index edbbae4ed3..950a3523a8 100755 --- a/core/lib/Foswiki/Configure/UIs/EXTENSIONS.pm +++ b/core/lib/Foswiki/Configure/UIs/EXTENSIONS.pm @@ -27,10 +27,10 @@ my $MNAME = qr/$mnamess/i; my %N2M; foreach ( 0 .. $#MNAMES ) { $N2M{ $MNAMES[$_] } = $_; } -# Convert a date in the format dd Mmm yyyy to a unique integer +# Convert a date in the formats dd mm yyyy or dd Mmm yyyy to a unique integer sub d2n { my ( $d, $m, $y ) = @_; - return ( $y * 12 + $N2M{ lc($m) } ) * 31 + $d; + return ( $y * 12 + $m ) * 31 + $d; } # Download the report page from the repository, and extract a hash of @@ -142,20 +142,20 @@ sub ui { $ext->{cssclass} = 'uptodate'; } elsif ( $ext->{installedVersion} =~ - /^\s*(\d+)\.(\d+)(?:\.(\d+))/ ) + /^\s*v?(\d+)\.(\d+)(?:\.(\d+))/ ) { - # X.Y.Z + # X.Y, X.Y.Z, vX.Y, vX.Y.Z # Combine into one number; allows up to 1000 # revs in each field my $irev = ( $1 * 1000 + $2 ) * 1000 + $3; $text = 'Re-install'; $ext->{cssclass} = 'uptodate'; - if ( $ext->{version} =~ /^\s*(\d+)\.(\d+)(?:\.(\d+))/ ) + if ( $ext->{version} =~ /^\s*v?(\d+)\.(\d+)(?:\.(\d+))?/ ) { # Compatible version number - my $arev = ( $1 * 1000 + $2 ) * 1000 + $3; + my $arev = ( $1 * 1000 + $2 ) * 1000 + ($3 || 0); if ( $arev > $irev ) { $text = 'Upgrade'; $ext->{cssclass} = 'upgrade'; @@ -194,12 +194,12 @@ sub ui { /(\d{1,2}) ($MNAME) (\d{4})/ ) { # dd Mmm yyyy date - my $idate = d2n( $1, $2, $3 ); + my $idate = d2n( $1, $N2M{lc($2)}, $3 ); $text = 'Re-install'; $ext->{cssclass} = 'uptodate'; if ( $ext->{version} =~ /(\d{1,2}) ($MNAME) (\d{4})/ ) { - my $adate = d2n( $1, $2, $3 ); + my $adate = d2n( $1, $N2M{lc($2)}, $3 ); if ( $adate > $idate ) { $text = 'Upgrade'; $ext->{cssclass} = 'upgrade';