Skip to content

Commit

Permalink
Separate framework and tool environments.
Browse files Browse the repository at this point in the history
Whether running locally or via PBS, $PATH should now be handled in your
user's environment.

This also fixes problems like PYTHONPATH on the new blast nodes being
wrong (because they are x86_64 and the frontends are i686).

Note that you can actually start Galaxy without having an eggs dir now.
  • Loading branch information
natefoo committed Apr 11, 2008
1 parent b97a818 commit 7560751
Show file tree
Hide file tree
Showing 70 changed files with 308 additions and 1,211 deletions.
149 changes: 70 additions & 79 deletions eggs.ini
@@ -1,46 +1,48 @@
;
; Galaxy egg version, download and build configuration.
; Galaxy egg version configuration
;
; This file is version controlled and should not be edited by hand!
; For more information, see:
; http://g2.trac.bx.psu.edu/wiki/GalaxyEggs
;

[general]
repository = http://eggs.g2.bx.psu.edu

; <python_module> = <version> <download_url>
[eggs]
; platform specific
bx_python = 0.5.0 http://dist.g2.bx.psu.edu/bx-python_dist-r414.tar.bz2
Cheetah = 1.0 http://umn.dl.sourceforge.net/sourceforge/cheetahtemplate/Cheetah-1.0.tar.gz
MySQL_python = 1.2.2 http://superb-west.dl.sourceforge.net/sourceforge/mysql-python/MySQL-python-1.2.2.tar.gz
pbs_python = 2.9.4 http://ftp.sara.nl/pub/outgoing/pbs_python-2.9.4.tar.gz
psycopg2 = 2.0.6 http://initd.org/pub/software/psycopg/psycopg2-2.0.6.tar.gz
pycrypto = 2.0.1 http://www.amk.ca/files/python/crypto/pycrypto-2.0.1.tar.gz
pysqlite = 2.3.5 http://initd.org/pub/software/pysqlite/releases/2.3/2.3.5/pysqlite-2.3.5.tar.gz
python_lzo = 1.08 http://www.oberhumer.com/opensource/lzo/download/LZO-v1/python-lzo-1.08.tar.gz
threadframe = 0.2 http://www.majid.info/python/threadframe/threadframe-0.2.tar.gz
; platform inspecific
Beaker = 0.5 http://cheeseshop.python.org/packages/source/B/Beaker/Beaker-0.5.tar.gz
docutils = 0.4 http://downloads.sourceforge.net/docutils/docutils-0.4.tar.gz
elementtree = 1.2.6_20050316 http://effbot.org/downloads/elementtree-1.2.6-20050316.tar.gz
flup = 0.5 http://www.saddi.com/software/flup/dist/flup-r2311.tar.gz
lrucache = 0.2 http://evan.prodromou.name/lrucache/lrucache-0.2.tar.gz
[eggs:platform]
bx_python = 0.5.0
Cheetah = 1.0
MySQL_python = 1.2.2
pbs_python = 2.9.4
psycopg2 = 2.0.6
pycrypto = 2.0.1
pysqlite = 2.3.5
python_lzo = 1.08
threadframe = 0.2

[eggs:noplatform]
Beaker = 0.5
docutils = 0.4
elementtree = 1.2.6_20050316
flup = 0.5
lrucache = 0.2
;lsprof - james
Mako = 0.1.10 http://www.makotemplates.org/downloads/Mako-0.1.10.tar.gz
MyghtyUtils = 0.52 http://cheeseshop.python.org/packages/source/M/MyghtyUtils/MyghtyUtils-0.52.zip
nose = 0.9.1 http://www.somethingaboutorange.com/mrl/projects/nose/nose-0.9.1.tar.gz
NoseHTML = 0.2 http://dist.g2.bx.psu.edu/nosehtml_dist-0.2.tar.bz2
Paste = 1.5.1 http://cheeseshop.python.org/packages/source/P/Paste/Paste-1.5.1.tar.gz
PasteDeploy = 1.3.1 http://cheeseshop.python.org/packages/source/P/PasteDeploy/PasteDeploy-1.3.1.tar.gz
PasteScript = 1.3.6 http://cheeseshop.python.org/packages/source/P/PasteScript/PasteScript-1.3.6.tar.gz
Routes = 1.6.3 http://pypi.python.org/packages/source/R/Routes/Routes-1.6.3.tar.gz
simplejson = 1.5 http://cheeseshop.python.org/packages/source/s/simplejson/simplejson-1.5.tar.gz
SQLAlchemy = 0.3.11 http://pypi.python.org/packages/source/S/SQLAlchemy/SQLAlchemy-0.3.11.tar.gz
Tempita = 0.1 http://pypi.python.org/packages/source/T/Tempita/Tempita-0.1.tar.gz
twill = 0.8.3 http://darcs.idyll.org/~t/projects/twill-0.8.3.tar.gz
;twill = 0.9 http://darcs.idyll.org/~t/projects/twill-0.9.tar.gz
WebError = 0.8a http://pypi.python.org/packages/source/W/WebError/WebError-0.8a.tar.gz
WebHelpers = 0.2 http://pypi.python.org/packages/source/W/WebHelpers/WebHelpers-0.2.tar.gz
WebOb = 0.8.5 http://pypi.python.org/packages/source/W/WebOb/WebOb-0.8.5.tar.gz
wsgiref = 0.1.2 http://pypi.python.org/packages/source/w/wsgiref/wsgiref-0.1.2.zip
Mako = 0.1.10
MyghtyUtils = 0.52
nose = 0.9.1
NoseHTML = 0.2
Paste = 1.5.1
PasteDeploy = 1.3.1
PasteScript = 1.3.6
Routes = 1.6.3
simplejson = 1.5
SQLAlchemy = 0.3.11
Tempita = 0.1
twill = 0.8.3
WebError = 0.8a
WebHelpers = 0.2
WebOb = 0.8.5
wsgiref = 0.1.2

; extra version information
[tags]
Expand All @@ -53,46 +55,35 @@ flup = .dev_r2311
bx_python = _dev_r414
nose = .dev_r101

; When using scramble.py, you may force scramble to build eggs for one of the
; following platforms by providing the platform as the second command line
; argument. Scramble will then ssh to the host defined and use the python
; interpreter defined to build the egg. This is mainly intended for Galaxy
; developers at Penn State who maintain the pre-built egg repository. To build
; eggs for your own platform, just leave off the platform argument to
; scramble.py.
[hosts]
py2.4-linux-i686-ucs2 = scofield.bx.psu.edu /depot/projects/pythons/linux-i686-ucs2/bin/python2.4
py2.4-linux-i686-ucs4 = scofield.bx.psu.edu /depot/projects/pythons/linux-i686-ucs4/bin/python2.4
py2.5-linux-i686-ucs2 = scofield.bx.psu.edu /depot/projects/pythons/linux-i686-ucs2/bin/python2.5
py2.5-linux-i686-ucs4 = scofield.bx.psu.edu /depot/projects/pythons/linux-i686-ucs4/bin/python2.5
py2.4-linux-x86_64-ucs2 = herbie.bx.psu.edu /depot/projects/pythons/linux-x86_64-ucs2/bin/python2.4
py2.4-linux-x86_64-ucs4 = herbie.bx.psu.edu /depot/projects/pythons/linux-x86_64-ucs4/bin/python2.4
py2.5-linux-x86_64-ucs2 = herbie.bx.psu.edu /depot/projects/pythons/linux-x86_64-ucs2/bin/python2.5
py2.5-linux-x86_64-ucs4 = herbie.bx.psu.edu /depot/projects/pythons/linux-x86_64-ucs4/bin/python2.5
py2.4-macosx-10.3-fat-ucs2 = medeski.bx.psu.edu /usr/local/bin/python2.4
py2.5-macosx-10.3-fat-ucs2 = medeski.bx.psu.edu /usr/local/bin/python2.5
py2.4-solaris-2.11-i86pc-ucs2 = victory.bx.psu.edu /depot/projects/pythons/solaris-2.11-i86pc-ucs2/bin/python2.4
py2.5-solaris-2.11-i86pc-ucs2 = victory.bx.psu.edu /depot/projects/pythons/solaris-2.11-i86pc-ucs2/bin/python2.5
py2.4-solaris-2.10-sun4u-ucs2 = v880.bx.psu.edu /depot/projects/pythons/solaris-2.10-sun4u-ucs2/bin/python2.4
py2.5-solaris-2.10-sun4u-ucs2 = v880.bx.psu.edu /depot/projects/pythons/solaris-2.10-sun4u-ucs2/bin/python2.5

; Instead of providing a platform name as the third argument, you may also
; provide one of these platform group names. Platforms on the right side of the
; assignment in [groups] must exist on the left side of an assignment in the
; [hosts] section. Penn State Galaxy developers building eggs for distribution
; should use 'all' for platform-specific eggs and 'all-noplatform' for
; platform-inspecific eggs.
[groups]
py2.4-linux = py2.4-linux-i686-ucs2 py2.4-linux-i686-ucs4 py2.4-linux-x86_64-ucs2 py2.4-linux-x86_64-ucs4
py2.5-linux = py2.5-linux-i686-ucs2 py2.5-linux-i686-ucs4 py2.5-linux-x86_64-ucs2 py2.5-linux-x86_64-ucs4
linux = py2.4-linux-i686-ucs2 py2.4-linux-i686-ucs4 py2.4-linux-x86_64-ucs2 py2.4-linux-x86_64-ucs4 py2.5-linux-i686-ucs2 py2.5-linux-i686-ucs4 py2.5-linux-x86_64-ucs2 py2.5-linux-x86_64-ucs4
py2.4-macosx = py2.4-macosx-10.3-fat-ucs2
py2.5-macosx = py2.5-macosx-10.3-fat-ucs2
macosx = py2.4-macosx-10.3-fat-ucs2 py2.5-macosx-10.3-fat-ucs2
py2.4-solaris = py2.4-solaris-2.11-i86pc-ucs2 py2.4-solaris-2.10-sun4u-ucs2
py2.5-solaris = py2.5-solaris-2.11-i86pc-ucs2 py2.5-solaris-2.10-sun4u-ucs2
solaris = py2.4-solaris-2.11-i86pc-ucs2 py2.4-solaris-2.10-sun4u-ucs2 py2.5-solaris-2.11-i86pc-ucs2 py2.5-solaris-2.10-sun4u-ucs2
py2.4-all = py2.4-linux-i686-ucs2 py2.4-linux-i686-ucs4 py2.4-linux-x86_64-ucs2 py2.4-linux-x86_64-ucs4 py2.4-macosx-10.3-fat-ucs2 py2.4-solaris-2.11-i86pc-ucs2 py2.4-solaris-2.10-sun4u-ucs2
py2.5-all = py2.5-linux-i686-ucs2 py2.5-linux-i686-ucs4 py2.5-linux-x86_64-ucs2 py2.5-linux-x86_64-ucs4 py2.5-macosx-10.3-fat-ucs2 py2.5-solaris-2.11-i86pc-ucs2 py2.5-solaris-2.10-sun4u-ucs2
all = py2.4-linux-i686-ucs2 py2.4-linux-i686-ucs4 py2.4-linux-x86_64-ucs2 py2.4-linux-x86_64-ucs4 py2.5-linux-i686-ucs2 py2.5-linux-i686-ucs4 py2.5-linux-x86_64-ucs2 py2.5-linux-x86_64-ucs4 py2.4-macosx-10.3-fat-ucs2 py2.5-macosx-10.3-fat-ucs2 py2.4-solaris-2.11-i86pc-ucs2 py2.4-solaris-2.10-sun4u-ucs2 py2.5-solaris-2.11-i86pc-ucs2 py2.5-solaris-2.10-sun4u-ucs2
all-noplatform = py2.4-solaris-2.11-i86pc-ucs2 py2.5-solaris-2.11-i86pc-ucs2
; source location, necessary for scrambling
[source]
bx_python = http://dist.g2.bx.psu.edu/bx-python_dist-r414.tar.bz2
Cheetah = http://umn.dl.sourceforge.net/sourceforge/cheetahtemplate/Cheetah-1.0.tar.gz
MySQL_python = http://superb-west.dl.sourceforge.net/sourceforge/mysql-python/MySQL-python-1.2.2.tar.gz http://mysql.mirrors.pair.com/Downloads/MySQL-5.0/mysql-5.0.51a.tar.gz
pbs_python = http://ftp.sara.nl/pub/outgoing/pbs_python-2.9.4.tar.gz http://www.clusterresources.com/downloads/torque/torque-%s.tar.gz
psycopg2 = http://initd.org/pub/software/psycopg/psycopg2-2.0.6.tar.gz http://ftp8.us.postgresql.org/postgresql/source/v8.2.6/postgresql-8.2.6.tar.bz2
pycrypto = http://www.amk.ca/files/python/crypto/pycrypto-2.0.1.tar.gz
pysqlite = http://initd.org/pub/software/pysqlite/releases/2.3/2.3.5/pysqlite-2.3.5.tar.gz http://www.sqlite.org/sqlite-source-3_5_4.zip
python_lzo = http://www.oberhumer.com/opensource/lzo/download/LZO-v1/python-lzo-1.08.tar.gz http://www.oberhumer.com/opensource/lzo/download/LZO-v1/lzo-1.08.tar.gz
threadframe = http://www.majid.info/python/threadframe/threadframe-0.2.tar.gz
Beaker = http://cheeseshop.python.org/packages/source/B/Beaker/Beaker-0.5.tar.gz
docutils = http://downloads.sourceforge.net/docutils/docutils-0.4.tar.gz
elementtree = http://effbot.org/downloads/elementtree-1.2.6-20050316.tar.gz
flup = http://www.saddi.com/software/flup/dist/flup-r2311.tar.gz
lrucache = http://evan.prodromou.name/lrucache/lrucache-0.2.tar.gz
Mako = http://www.makotemplates.org/downloads/Mako-0.1.10.tar.gz
MyghtyUtils = http://cheeseshop.python.org/packages/source/M/MyghtyUtils/MyghtyUtils-0.52.zip
nose = http://www.somethingaboutorange.com/mrl/projects/nose/nose-0.9.1.tar.gz
NoseHTML = http://dist.g2.bx.psu.edu/nosehtml-0.2.tar.bz2
Paste = http://cheeseshop.python.org/packages/source/P/Paste/Paste-1.5.1.tar.gz
PasteDeploy = http://cheeseshop.python.org/packages/source/P/PasteDeploy/PasteDeploy-1.3.1.tar.gz
PasteScript = http://cheeseshop.python.org/packages/source/P/PasteScript/PasteScript-1.3.6.tar.gz
Routes = http://pypi.python.org/packages/source/R/Routes/Routes-1.6.3.tar.gz
simplejson = http://cheeseshop.python.org/packages/source/s/simplejson/simplejson-1.5.tar.gz
SQLAlchemy = http://pypi.python.org/packages/source/S/SQLAlchemy/SQLAlchemy-0.3.11.tar.gz
Tempita = http://pypi.python.org/packages/source/T/Tempita/Tempita-0.1.tar.gz
twill = http://darcs.idyll.org/~t/projects/twill-0.8.3.tar.gz
WebError = http://pypi.python.org/packages/source/W/WebError/WebError-0.8a.tar.gz
WebHelpers = http://pypi.python.org/packages/source/W/WebHelpers/WebHelpers-0.2.tar.gz
WebOb = http://pypi.python.org/packages/source/W/WebOb/WebOb-0.8.5.tar.gz
wsgiref = http://pypi.python.org/packages/source/w/wsgiref/wsgiref-0.1.2.zip
17 changes: 16 additions & 1 deletion lib/galaxy/eggs/__init__.py
Expand Up @@ -3,6 +3,7 @@
"""

import os, sys, shutil, tarfile, zipfile, subprocess, ConfigParser, glob, urllib2
from types import ModuleType

import logging
log = logging.getLogger( __name__ )
Expand All @@ -13,6 +14,9 @@
# within tools. i don't know of any way around this. -ndc
galaxy_dir = os.path.abspath( os.path.join( os.path.dirname( __file__ ), "..", "..", ".." ) )

class NewEgg( Exception ):
pass

class EggNotFetchable( Exception ):
pass

Expand Down Expand Up @@ -406,6 +410,8 @@ def require( pkg ):
else:
pkg_resources.working_set.require( "%s==%s" % ( name, egg.get_vertag() ) )
return
except UserWarning, e:
sys.exit( 1 )
except pkg_resources.VersionConflict, e:
# there's a conflicting egg on the pythonpath, remove it
dist = pkg_resources.get_distribution( name )
Expand All @@ -419,9 +425,17 @@ def require( pkg ):
if not egg.have:
if not egg.fetch():
raise EggNotFetchable( egg.name )
pkg_resources.working_set.require( "%s==%s" % ( name, egg.get_vertag() ) )
if dist.project_name in sys.modules:
try:
mod = sys.modules[dist.project_name]
reload( mod )
except:
raise NewEgg( "Galaxy downloaded a new egg (%s) but was unable to reload the module it contained. Please try starting Galaxy again." % egg.name )
except pkg_resources.DistributionNotFound, e:
# the initial require itself is the first dep, but it can have
# multiple deps, which will be fetched by the require below.
print >>sys.stdout, "foo"
dep = pkg_resources.Requirement.parse( str( e ) ).project_name
egg = c.get_for_require( dep )
if egg is None:
Expand All @@ -431,7 +445,8 @@ def require( pkg ):
if not egg.have:
if not egg.fetch():
raise EggNotFetchable( egg.name )
require( pkg )
pkg_resources.working_set.require( "%s==%s" % ( name, egg.get_vertag() ) )
#require( pkg )

# convenience stuff
def get_ucs():
Expand Down
4 changes: 4 additions & 0 deletions lib/galaxy/jobs/__init__.py
Expand Up @@ -264,6 +264,7 @@ def __init__(self, job_id, tool, queue ):
self.extra_filenames = []
self.working_directory = None
self.command_line = None
self.galaxy_lib_dir = None

def get_param_dict( self ):
"""
Expand Down Expand Up @@ -318,6 +319,9 @@ def prepare( self ):
param_filename = self.tool.build_param_file( param_dict, self.working_directory )
# Build the job's command line
self.command_line = self.tool.build_command_line( param_dict )
# FIXME: for now, tools get Galaxy's lib dir in their path
if self.command_line.startswith( 'python' ):
self.galaxy_lib_dir = os.path.abspath( "lib" ) # cwd = galaxy root
# command_line won't actually be set in the db until finish unless you do it here
# We need it in the db to be able to restart jobs -ndc
job.command_line = self.command_line
Expand Down
8 changes: 8 additions & 0 deletions lib/galaxy/jobs/runners/local.py
Expand Up @@ -53,13 +53,21 @@ def run_job( self, job_wrapper ):
return
# If we were able to get a command line, run the job
if command_line:
if job_wrapper.galaxy_lib_dir is not None:
if 'PYTHONPATH' in os.environ:
env = { 'PYTHONPATH' : "%s:%s" % ( os.environ['PYTHONPATH'], job_wrapper.galaxy_lib_dir ) }
else:
env = { 'PYTHONPATH' : job_wrapper.galaxy_lib_dir }
else:
env = {}
try:
log.debug( 'executing: %s' % command_line )
proc = subprocess.Popen( args = command_line,
shell = True,
cwd = job_wrapper.working_directory,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
env = env,
preexec_fn = os.setpgrp )
job_wrapper.set_runner( 'local:///', proc.pid )
stdout = proc.stdout.read()
Expand Down
40 changes: 26 additions & 14 deletions lib/galaxy/jobs/runners/pbs.py
Expand Up @@ -6,6 +6,7 @@
from Queue import Queue, Empty

from galaxy import model
from paste.deploy.converters import asbool

import pkg_resources

Expand All @@ -18,17 +19,27 @@
log = logging.getLogger( __name__ )

pbs_template = """#!/bin/sh
export LC_ALL='%s'
export PATH='%s'
export PYTHONPATH='%s'
GALAXY_LIB="%s"
if [ "$GALAXY_LIB" != "None" ]; then
if [ -n "$PYTHONPATH" ]; then
export PYTHONPATH="$GALAXY_LIB:$PYTHONPATH"
else
export PYTHONPATH="$GALAXY_LIB"
fi
fi
cd %s
%s
"""

pbs_symlink_template = """#!/bin/sh
export LC_ALL='%s'
export PATH='%s'
export PYTHONPATH='%s'
GALAXY_LIB="%s"
if [ "$GALAXY_LIB" != "None" ]; then
if [ -n "$PYTHONPATH" ]; then
export PYTHONPATH="$GALAXY_LIB:$PYTHONPATH"
else
export PYTHONPATH="$GALAXY_LIB"
fi
fi
for dataset in %s; do
dir=`dirname $dataset`
file=`basename $dataset`
Expand Down Expand Up @@ -168,9 +179,9 @@ def queue_job( self, job_wrapper ):

# write the job script
if self.app.config.pbs_stage_path != '':
script = pbs_symlink_template % (os.environ['LC_ALL'], os.environ['NODEPATH'], os.environ['PYTHONPATH'], " ".join(job_wrapper.get_input_fnames() + job_wrapper.get_output_fnames()), self.app.config.pbs_stage_path, exec_dir, command_line)
script = pbs_symlink_template % (job_wrapper.galaxy_lib_dir, " ".join(job_wrapper.get_input_fnames() + job_wrapper.get_output_fnames()), self.app.config.pbs_stage_path, exec_dir, command_line)
else:
script = pbs_template % (os.environ['LC_ALL'], os.environ['NODEPATH'], os.environ['PYTHONPATH'], exec_dir, command_line)
script = pbs_template % (job_wrapper.galaxy_lib_dir, exec_dir, command_line)
job_file = "%s/database/pbs/%s.sh" % (os.getcwd(), job_wrapper.job_id)
fh = file(job_file, "w")
fh.write(script)
Expand Down Expand Up @@ -347,12 +358,13 @@ def finish_job( self, pbs_job_state ):
log.exception("Job wrapper finish method failed")

# clean up the job_file, ofile, efile
if os.access(ofile, os.R_OK):
os.unlink(ofile)
if os.access(efile, os.R_OK):
os.unlink(efile)
if os.access(job_file, os.R_OK):
os.unlink(job_file)
if not asbool( self.app.config.get( 'debug', False ) ):
if os.access(ofile, os.R_OK):
os.unlink(ofile)
if os.access(efile, os.R_OK):
os.unlink(efile)
if os.access(job_file, os.R_OK):
os.unlink(job_file)

def put( self, job_wrapper ):
"""Add a job to the queue (by job identifier)"""
Expand Down
10 changes: 0 additions & 10 deletions nosetests.sh

This file was deleted.

18 changes: 2 additions & 16 deletions run.sh
@@ -1,18 +1,4 @@
#!/bin/sh

. ./scripts/get_python.sh
. ./setup_paths.sh

# Create directories
CREATE_DIRS="
$UNIVERSE_HOME/database/$CREATE_DIR/files
$UNIVERSE_HOME/database/$CREATE_DIR/tmp
"

for CREATE_DIR in $CREATE_DIRS; do
if [ ! -d $CREATE_DIR -o ! -h $CREATE_DIR ]; then
mkdir -p $CREATE_DIR
fi
done

$GALAXY_PYTHON ./scripts/paster.py serve universe_wsgi.ini $@
cd `dirname $0`
python -ES ./scripts/paster.py serve universe_wsgi.ini $@
8 changes: 4 additions & 4 deletions run_functional_tests.sh
Expand Up @@ -5,24 +5,24 @@
rm -f run_functional_tests.log

if [ ! $1 ]; then
./nosetests.sh -v -w test --with-nosehtml --html-report-file run_functional_tests.html --exclude="^get" functional
python -ES ./scripts/nosetests.py -v -w test --with-nosehtml --html-report-file run_functional_tests.html --exclude="^get" functional
elif [ $1 = 'help' ]; then
echo "'run_functional_tests.sh' for testing all the tools in functional directory"
echo "'run_functional_tests.sh aaa' for testing one test case of 'aaa' ('aaa' is the file name with path)"
echo "'run_functional_tests.sh -id bbb' for testing one tool with id 'bbb' ('bbb' is the tool id)"
echo "'run_functional_tests.sh -sid ccc' for testing one section with sid 'ccc' ('ccc' is the string after 'section::')"
echo "'run_functional_tests.sh -list' for listing all the tool ids"
elif [ $1 = '-id' ]; then
./nosetests.sh -v -w test functional.test_toolbox:TestForTool_$2 --with-nosehtml --html-report-file run_functional_tests.html
python -ES ./scripts/nosetests.py -v -w test functional.test_toolbox:TestForTool_$2 --with-nosehtml --html-report-file run_functional_tests.html
elif [ $1 = '-sid' ]; then
./nosetests.sh --with-nosehtml --html-report-file run_functional_tests.html -v -w test `python tool_list.py $2`
python -ES ./scripts/nosetests.py --with-nosehtml --html-report-file run_functional_tests.html -v -w test `python tool_list.py $2`
elif [ $1 = '-list' ]; then
python tool_list.py
echo "==========================================================================================================================================="
echo "'run_functional_tests.sh -id bbb' for testing one tool with id 'bbb' ('bbb' is the tool id)"
echo "'run_functional_tests.sh -sid ccc' for testing one section with sid 'ccc' ('ccc' is the string after 'section::')"
else
./nosetests.sh -v -w test --with-nosehtml --html-report-file run_functional_tests.html $1
python -ES ./scripts/nosetests.py -v -w test --with-nosehtml --html-report-file run_functional_tests.html $1
fi

echo "'run_functional_tests.sh help' for help"
Expand Down

0 comments on commit 7560751

Please sign in to comment.