diff --git a/scripts/init_pipeline.pl b/scripts/init_pipeline.pl index dfb5d0771f6cd76d0490307c08cdef7600a88fb1..a23acc25420247f2e88ac341fd56fa1a6f139c17 100755 --- a/scripts/init_pipeline.pl +++ b/scripts/init_pipeline.pl @@ -3,18 +3,116 @@ # A generic loader of hive pipelines. # # Because all of the functionality is hidden in Bio::EnsEMBL::Hive::PipeConfig::HiveGeneric_conf -# you can create pipelines by calling the methods directly, so the script is just a commandline wrapper. +# you can create pipelines by calling the right methods of HiveGeneric_conf directly, +# so this script is just a commandline wrapper that can conveniently find modules by their filename. use strict; use warnings; -my $default_config_module = 'Bio::EnsEMBL::Hive::PipeConfig::HiveGeneric_conf'; -my $config_module = shift @ARGV || (warn "<config_module> undefined, using default '$default_config_module'\n" and $default_config_module); +sub usage { + my $retvalue = shift @_; -eval "require $config_module;"; + if(`which perldoc`) { + system('perldoc', $0); + } else { + foreach my $line (<DATA>) { + if($line!~s/\=\w+\s?//) { + $line = "\t$line"; + } + print $line; + } + } + exit($retvalue); +} -my $self = $config_module->new(); +sub module_from_file { + my $filename = shift @_; -$self->process_options(); -$self->run(); + if(my $package_line = `grep ^package $filename`) { + if($package_line=~/^package\s+((?:\w|::)+)\s*;/) { + return $1; + } else { + warn "Package line format unrecognized:\n$package_line\n"; + usage(1); + } + } else { + warn "Could not find the package definition line in '$filename'\n"; + usage(1); + } +} + +sub process_options_and_run_module { + my $config_module = shift @_; + + eval "require $config_module;"; + + my $self = $config_module->new(); + + $self->process_options(); + $self->run(); +} + +sub main { + my $file_or_module = shift @ARGV || usage(0); + + if( $file_or_module=~/^(\w|::)+$/ ) { + + process_options_and_run_module( $file_or_module ); + + } elsif(-r $file_or_module) { + + process_options_and_run_module( module_from_file( $file_or_module ) ); + + } else { + warn "The first parameter '$file_or_module' neither seems to be a valid module in PERL5LIB nor a valid readable file\n"; + usage(1); + } +} + +main(); + +__DATA__ + +=pod + +=head1 NAME + + init_pipeline.pl + +=head1 SYNOPSIS + + init_pipeline.pl <config_module_or_filename> [-help | [ [-topup] <options_for_this_particular_pipeline>] + +=head1 DESCRIPTION + +init_pipeline.pl is a generic script that is used to create+setup=initialize eHive pipelines from PipeConfig configuration modules. + +=head1 USAGE EXAMPLES + + # get this help message: +init_pipeline.pl + + # initialize a generic eHive pipeline: +init_pipeline.pl Bio::EnsEMBL::Hive::PipeConfig::HiveGeneric_conf -password <yourpassword> + + # see what command line options are available when initializing long multiplication example pipeline + # (assuming your current directory is ensembl-hive/modules/Bio/EnsEMBL/Hive) : +init_pipeline.pl PipeConfig/LongMult_conf -help + + # initialize the long multiplicaton pipeline by supplying not only mandatory but also optional data: + # (assuming your current directory is ensembl-hive/modules/Bio/EnsEMBL/Hive/PipeConfig) : +init_pipeline.pl LongMult_conf -password <yourpassword> -first_mult 375857335 -second_mult 1111333355556666 + +=head1 OPTIONS + + -help : get automatically generated list of options that can be set/changed when initializing a particular pipeline + + -topup : a special initialization mode when (1) pipeline_create_commands are switched off and (2) only newly defined analyses are added to the database + This mode is only useful in the process of putting together a new pipeline. + +=head1 CONTACT + + Please contact ehive-users@ebi.ac.uk mailing list with questions/suggestions. + +=cut