[Bio] / FigWebServices / install_subsystem_dir.cgi Repository:
ViewVC logotype

View of /FigWebServices/install_subsystem_dir.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (download) (annotate)
Wed May 23 20:51:30 2007 UTC (12 years, 5 months ago) by olson
Branch: MAIN
CVS Tags: mgrast_dev_08112011, rast_rel_2009_05_18, mgrast_dev_08022011, rast_rel_2014_0912, rast_rel_2008_06_18, myrast_rel40, rast_rel_2008_06_16, mgrast_dev_05262011, rast_rel_2008_12_18, mgrast_dev_04082011, rast_rel_2008_07_21, rast_rel_2010_0928, rast_2008_0924, mgrast_version_3_2, mgrast_dev_12152011, rast_rel_2008_04_23, mgrast_dev_06072011, rast_rel_2008_09_30, rast_rel_2009_0925, rast_rel_2010_0526, rast_rel_2014_0729, mgrast_dev_02212011, rast_rel_2010_1206, mgrast_release_3_0, mgrast_dev_03252011, rast_rel_2010_0118, mgrast_rel_2008_0924, mgrast_rel_2008_1110_v2, rast_rel_2009_02_05, rast_rel_2011_0119, mgrast_rel_2008_0625, mgrast_release_3_0_4, mgrast_release_3_0_2, mgrast_release_3_0_3, mgrast_release_3_0_1, mgrast_dev_03312011, mgrast_release_3_1_2, mgrast_release_3_1_1, mgrast_release_3_1_0, mgrast_dev_04132011, rast_rel_2008_10_09, mgrast_dev_04012011, rast_release_2008_09_29, mgrast_rel_2008_0806, mgrast_rel_2008_0923, mgrast_rel_2008_0919, rast_rel_2009_07_09, rast_rel_2010_0827, mgrast_rel_2008_1110, myrast_33, rast_rel_2011_0928, rast_rel_2008_09_29, mgrast_rel_2008_0917, rast_rel_2008_10_29, mgrast_dev_04052011, mgrast_dev_02222011, rast_rel_2009_03_26, mgrast_dev_10262011, rast_rel_2008_11_24, rast_rel_2008_08_07, HEAD
CGI for installing subsystem directory.

#
# Install a subsystem directory as invoked by $fig->install_subsystem_directory_on_server.
#
# CGI params:
#
#    ssa => subsystem name
#    tarfile => uploaded tarfile 
#

use strict;
use FIG_Config;
use FIG;
use Data::Dumper;

my $cgi = new CGI;

my $ssa = $cgi->param('ssa');

if ($ssa eq '')
{
    &error("No SS name provided");
}

if ($ssa =~ m,[/\s], or $ssa =~ /^\./)
{
    &error("Invalid subsystem name");
}

my $subsys_dir = "$FIG_Config::data/Subsystems/$ssa";

#
# Try to create the subsys dir. If it fails due to subsystem already existing,
# we already had the subsys. If it failed for some other reason, relay that as well.
#

my $rc = mkdir($subsys_dir);
if (!$rc)
{
    if ($! =~ /exists/)
    {
	&error("Subsystem already exists ($subsys_dir $!)");
    }
    else
    {
	&error("Cannot create subsystem directory for $ssa: $!");
    }
}

#
# If we've gotten this far we should be in good shape. Try to untar.
#

my $fh = $cgi->upload('tarfile');

if (!$fh)
{
    &error("Missing file");
}

my $tarout = "$FIG_Config::temp/tar.out.$$";
if (!open(TAR, "|tar -C $subsys_dir -v -x -f - -z > $tarout 2>&1"))
{
    system("rm -rf $subsys_dir");
    unlink($tarout);
    error("Error running tar: $!");
}

my $buf;
while (read($fh, $buf, 4096))
{
    print TAR $buf;
}

close(TMP);
my $rc = close(TAR);

if (!$rc)
{
    my $err = "error closing tar: \$!=$! \$?=$?";
    my $tar_result = &FIG::file_read($tarout);
    unlink($tarout);
    system("rm -rf $subsys_dir");
    &error($err, $tar_result);
}

my $tar_result = &FIG::file_read($tarout);
unlink($tarout);

#
# Make sure it was a valid subsystem
#

if (! -f "$subsys_dir/spreadsheet")
{
    system("rm -rf $subsys_dir");
    &error("Upload was not a valid subsystem", $tar_result);
}    

#
# Index.
#

my $tmp = "$FIG_Config::temp/index.$$.tmp";
my $cmd = "$FIG_Config::bin/index_subsystems $ssa > $tmp 2>&1";
my $rc = system($cmd);
my $sub_result = &FIG::file_read($tmp);
unlink($tmp);
if ($rc != 0)
{
    system("rm -rf $subsys_dir");
    &error("error indexing subsystems", "rc=$rc cmd=$cmd\nresult:\n$sub_result\n");
}


print $cgi->header(-type => 'text/plain');
print "Successfully created $ssa\n";
print $tar_result;
print $sub_result;
exit(0);

sub error
{
    my($msg, $content) = @_;

    print $cgi->header(-status => "500 error", -type => 'text/plain');
    print $msg;
    if ($content)
    {
	print "\n$content";
    }
    exit(0);
}

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3