91 lines
2.1 KiB
Perl
91 lines
2.1 KiB
Perl
|
#!/usr/bin/perl
|
||
|
|
||
|
use JSON::XS;
|
||
|
|
||
|
#my $coder = JSON::XS->new->utf8->pretty->allow_nonref;
|
||
|
my $coder = JSON::XS->new->utf8->allow_nonref;
|
||
|
|
||
|
my $PLUGINS_TREE = './src'; # Path to GIT directory containing OVMS v3 firmware
|
||
|
my $PLUGINS_PATH = $PLUGINS_TREE . '/plugins';
|
||
|
my $REL_PATH = './dst'; # Path to destination web server directory
|
||
|
my $REV_PATH = $REL_PATH . '/plugins.rev';
|
||
|
my $REG_PATH = $REL_PATH . '/plugins.json';
|
||
|
|
||
|
if (! -e $REV_PATH)
|
||
|
{
|
||
|
print "Creating new $REV_PATH\n";
|
||
|
open my $rev, '>', $REV_PATH;
|
||
|
print $rev 'unknown';
|
||
|
close $rev;
|
||
|
}
|
||
|
|
||
|
print "Updating plugin sources...\n";
|
||
|
chdir $PLUGINS_TREE;
|
||
|
system '/usr/bin/git fetch --tags';
|
||
|
system '/usr/bin/git pull';
|
||
|
chdir $PLUGINS_PATH;
|
||
|
|
||
|
my $EXIST_REV = slurp($REV_PATH);
|
||
|
my $PLUGINS_REV = `/usr/bin/git describe --always --tags --dirty`;
|
||
|
print "Plugins Revision: $PLUGINS_REV\n";
|
||
|
|
||
|
if ($EXIST_REV eq $PLUGINS_REV)
|
||
|
{
|
||
|
print "Plugins are unchanged. All done.\n";
|
||
|
exit(0);
|
||
|
}
|
||
|
|
||
|
# Rebuild the plugin metadata...
|
||
|
|
||
|
my @registry;
|
||
|
print "Building plugin repository...\n";
|
||
|
opendir my $dh, '.' || die "Can't open plugin directory: $!";
|
||
|
while (readdir $dh)
|
||
|
{
|
||
|
my $plugin = $_;
|
||
|
next if ($plugin =~ /^\.\.?$/);
|
||
|
next if (! -d $plugin);
|
||
|
print " $plugin\n";
|
||
|
my $json = slurp($plugin . '/' . $plugin . '.json');
|
||
|
eval
|
||
|
{
|
||
|
my $data = $coder->decode($json);
|
||
|
push @registry,$data;
|
||
|
};
|
||
|
if ($@)
|
||
|
{
|
||
|
die "JSON metadata could not be decoded for '$plugin': $!";
|
||
|
}
|
||
|
}
|
||
|
closedir $dh;
|
||
|
print "Loaded metadata for ", (scalar @registry), " plugin(s)\n";
|
||
|
|
||
|
# Write out the metadata registry
|
||
|
print "Writing metadata registry to $REG_PATH\n";
|
||
|
open my $reg, '>', $REG_PATH;
|
||
|
print $reg $coder->encode(\@registry);
|
||
|
close $reg;
|
||
|
|
||
|
# Save the new revision
|
||
|
open my $rev,'>',$REV_PATH;
|
||
|
print $rev $PLUGINS_REV;
|
||
|
close $rev;
|
||
|
|
||
|
# Rsync release
|
||
|
|
||
|
print "Releasing plugins...\n";
|
||
|
system "/usr/bin/rsync -a --delete --delay-updates --exclude='plugins.rev' --exclude='plugins.json' $PLUGINS_PATH/ $REL_PATH";
|
||
|
|
||
|
exit(0);
|
||
|
|
||
|
sub slurp
|
||
|
{
|
||
|
my ($path) = @_;
|
||
|
|
||
|
open my $fh, '<', $path or die "Can't open file $!";
|
||
|
my $file_content = do { local $/; <$fh> };
|
||
|
close $fh;
|
||
|
|
||
|
return $file_content;
|
||
|
}
|