]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Track installed module versions, so we can do upgrades properly.
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 4 Aug 2009 21:49:35 +0000 (21:49 +0000)
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 4 Aug 2009 21:49:35 +0000 (21:49 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11489 e03df62e-2008-0410-955e-edbf42e46eb7

make/configure.pm
modulemanager

index 05db6004e75b8864cdd1ceceb4f70115a51b1c6c..ae88d90ce2c764ffd27d0e9d21582908ea52d026 100644 (file)
@@ -20,7 +20,7 @@ use warnings FATAL => qw(all);
 use Exporter 'import';
 use POSIX;
 use make::utilities;
-our @EXPORT = qw(promptnumeric dumphash is_dir getmodules getrevision getcompilerflags getlinkerflags getdependencies getmodversion nopedantic resolve_directory yesno showhelp promptstring_s);
+our @EXPORT = qw(promptnumeric dumphash is_dir getmodules getrevision getcompilerflags getlinkerflags getdependencies nopedantic resolve_directory yesno showhelp promptstring_s);
 
 my $no_svn = 0;
 
@@ -122,21 +122,6 @@ sub getdependencies {
        return "";
 }
 
-sub getmodversion {
-       my ($file) = @_;
-       open(FLAGS, $file) or return "";
-       while (<FLAGS>) {
-               if (m#(?:^/* \$|")ModVersion: (\S+)(?: \*\/$|")#) {
-                       my $x = translate_functions($1, $file);
-                       next if ($x eq "");
-                       close(FLAGS);
-                       return $x;
-               }
-       }
-       close(FLAGS);
-       return "";
-}
-
 sub nopedantic {
        my ($file) = @_;
        open(FLAGS, $file) or return "";
index 96d58834d8024caeb0d78fb4f7c651504201e826..68d32324d91c75a2bed3e6cfdc73b02fd900ce08 100755 (executable)
@@ -24,6 +24,7 @@ my %url_seen;
 
 sub parse_url;
 
+# retrieve and parse entries from sources.list
 sub parse_url {
        my $src = shift;
        return if $url_seen{$src};
@@ -65,6 +66,29 @@ sub parse_url {
        }
 }
 
+# hash of installed module versions from our mini-database, key (m_foobar) to version (00abacca..).
+my %mod_versions;
+
+# useless helper stub
+sub getmodversion {
+       my ($file) = @_;
+       return $mod_versions{$file};
+}
+
+# read in installed versions
+if (-e '.modulemanager')
+{
+       open SRC, '.modulemanager' or die ".modulemanager exists but i can't read it: $!";
+       while (<SRC>)
+       {
+               s/\n//;
+               (my $mod, my $ver) = split(/ /, $_);
+               $mod_versions{$mod} = $ver;
+       }
+       close SRC;
+}
+
+# read in external URL sources
 open SRC, 'sources.list' or die "Could not open sources.list: $!";
 while (<SRC>) {
        next if /^\s*#/;
@@ -74,6 +98,7 @@ close SRC;
 
 getmodules(1);
 
+# determine core version
 `./src/version.sh` =~ /InspIRCd-([0-9.]+)/ or die "Cannot determine inspircd version";
 $installed{core} = $1;
 $modules{core}{$1} = {
@@ -83,10 +108,11 @@ $modules{core}{$1} = {
        from => 'local file',
 };
 
+# set up core module list
 for my $modname (@modlist) {
        my $mod = "m_$modname";
        my $modfile = "src/modules/$mod.cpp";
-       my $ver = getmodversion($modfile) || '0.0';
+       my $ver = getmodversion($mod) || '0.0';
        $ver =~ s/\$Rev: (.*) \$/$1/; # for storing revision in SVN
        $installed{$mod} = $ver;
        next if $modules{$mod}{$ver};
@@ -270,10 +296,20 @@ for my $mod (sort keys %todo) {
        } else {
                print "Installing $mod $ver from $url";
        }
+       $mod_versions{$mod} = $ver;
+
        my $stat = getstore($url, "src/modules/$mod.cpp");
        if ($stat == 200) {
                print " - done\n";
        } else {
                print " - HTTP $stat\n";
        }
+
+       # write database of installed versions
+       open SRC, '>.modulemanager' or die "can't write installed versions to .modulemanager, won't be able to track upgrades properly: $!";
+       foreach my $key (keys %mod_versions)
+       {
+               print SRC "$key $mod_versions{$key}\n";
+       }
+       close SRC;
 }