Skip to content
Snippets Groups Projects
Commit fbb0ee9f authored by Ian Longden's avatar Ian Longden
Browse files

connection dropped fix by using dbadaptors etc which has already checks connections etc.

parent 14f8ef97
No related branches found
No related tags found
No related merge requests found
......@@ -50,8 +50,8 @@ my %source_to_external_db;
my %xrefs_written;
my %object_xrefs_written;
my $core_dbi;
my $xref_dbi;
#my $core_dbi;
#my $xref_dbi;
=head2 dump_seqs
......@@ -73,8 +73,8 @@ sub dump_seqs{
my ($self, $location) = @_;
# initialise DB connections
$core_dbi = $self->dbi();
$xref_dbi = $self->xref()->dbi();
# $core_dbi = $self->dbc;
# $xref_dbi = $self->xref()->dbc;
$self->dump_xref();
$self->dump_ensembl($location);
......@@ -133,10 +133,10 @@ sub build_list_and_map {
=cut
sub get_species_id_from_species_name{
my ($xref,$species) = @_;
my ($self,$species) = @_;
my $sql = "select species_id from species where name = '".$species."'";
my $sth = $xref_dbi->prepare($sql);
my $sth = $self->dbc->prepare($sql);
$sth->execute();
my @row = $sth->fetchrow_array();
my $species_id;
......@@ -146,7 +146,7 @@ sub get_species_id_from_species_name{
print STDERR "Couldn't get ID for species ".$species."\n";
print STDERR "It must be one of :-\n";
$sql = "select name from species";
$sth = $xref_dbi->prepare($sql);
$sth = $self->dbc->prepare($sql);
$sth->execute();
while(my @row = $sth->fetchrow_array()){
print STDERR $row[0]."\n";
......@@ -196,11 +196,11 @@ sub get_set_lists{
=cut
sub get_source_id_from_source_name{
my ($xref, $source) = @_;
my ($self, $source) = @_;
my $source_id;
my $sql = "select source_id from source where name = '".$source."'";
my $sth = $xref_dbi->prepare($sql);
my $sth = $self->dbc->prepare($sql);
$sth->execute();
my @row = $sth->fetchrow_array();
if (defined $row[0] and $row[0] ne '') {
......@@ -210,7 +210,7 @@ sub get_source_id_from_source_name{
print STDERR "Couldn't get ID for source ".$source."\n";
print STDERR "It must be one of :-\n";
$sql = "select name from source";
$sth = $xref_dbi->prepare($sql);
$sth = $self->dbc->prepare($sql);
$sth->execute();
while(my @row = $sth->fetchrow_array()){
print STDERR $row[0]."\n";
......@@ -373,7 +373,7 @@ sub dump_subset{
$sql .= " LIMIT ".$self->maxdump()." ";
}
my $sth = $xref->dbi()->prepare($sql);
my $sth = $xref->dbc->prepare($sql);
$sth->execute();
while(my @row = $sth->fetchrow_array()){
......@@ -418,13 +418,7 @@ sub dump_ensembl{
sub fetch_and_dump_seq{
my ($self, $location) = @_;
my $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(-species => $self->species(),
-dbname => $self->dbname(),
-host => $self->host(),
-port => $self->port(),
-pass => $self->password(),
-user => $self->user(),
-group => 'core');
my $db = $self;
#
# store ensembl dna file name and open it
......@@ -776,12 +770,12 @@ sub parse_mappings {
my $dir = $self->dir();
#create new connections incase old ones have died.
$core_dbi = $self->dbi();
$xref_dbi = $self->xref()->dbi();
# incase timed out.
$self->dbc->connect();
$self->xref->dbc->connect();
# get current max object_xref_id
my $row = @{$core_dbi->selectall_arrayref("SELECT MAX(object_xref_id) FROM object_xref")}[0];
my $row = @{$self->dbc->db_handle->selectall_arrayref("SELECT MAX(object_xref_id) FROM object_xref")}[0];
my $max_object_xref_id = @{$row}[0];
if (!defined $max_object_xref_id) {
print "Can't get highest existing object_xref_id, using 1\n";
......@@ -792,7 +786,7 @@ sub parse_mappings {
my $object_xref_id_offset = $max_object_xref_id + 1;
my $object_xref_id = $object_xref_id_offset;
$row = @{$self->dbi->selectall_arrayref("SELECT MAX(xref_id) FROM xref")}[0];
$row = @{$self->dbc->db_handle->selectall_arrayref("SELECT MAX(xref_id) FROM xref")}[0];
my $max_xref_id = @$row[0];
if (!defined $max_xref_id) {
print "Can't get highest existing xref_id, using 1\n";
......@@ -924,7 +918,7 @@ sub dump_orphan_xrefs() {
# need a double left-join
my $sql = "SELECT x.xref_id, x.accession, x.version, x.label, x.description, x.source_id, x.species_id FROM xref x LEFT JOIN primary_xref px ON px.xref_id=x.xref_id LEFT JOIN dependent_xref dx ON dx.dependent_xref_id=x.xref_id WHERE px.xref_id IS NULL AND dx.dependent_xref_id IS NULL";
my $sth = $xref_dbi->prepare($sql);
my $sth = $self->xref->dbc->prepare($sql);
$sth->execute();
my ($xref_id, $accession, $version, $label, $description, $source_id, $species_id);
......@@ -967,7 +961,7 @@ sub dump_direct_xrefs {
# Will need to look up translation stable ID from transcript stable ID, build hash table
print "Building transcript stable ID -> translation stable ID lookup table\n";
my %transcript_stable_id_to_translation_stable_id;
my $trans_sth = $core_dbi->prepare("SELECT tss.stable_id as transcript, tls.stable_id AS translation FROM translation tl, translation_stable_id tls, transcript_stable_id tss WHERE tss.transcript_id=tl.transcript_id AND tl.translation_id=tls.translation_id");
my $trans_sth = $self->dbc->prepare("SELECT tss.stable_id as transcript, tls.stable_id AS translation FROM translation tl, translation_stable_id tls, transcript_stable_id tss WHERE tss.transcript_id=tl.transcript_id AND tl.translation_id=tls.translation_id");
$trans_sth->execute();
my ($transcript_stable_id, $translation_stable_id);
$trans_sth->bind_columns(\$transcript_stable_id, \$translation_stable_id);
......@@ -981,7 +975,7 @@ sub dump_direct_xrefs {
# SQL / statement handle for getting all direct xrefs
my $xref_sql = "SELECT dx.general_xref_id, dx.ensembl_stable_id, dx.type, dx.linkage_xref, x.accession, x.version, x.label, x.description, x.source_id, x.species_id FROM direct_xref dx, xref x WHERE dx.general_xref_id=x.xref_id";
my $xref_sth = $xref_dbi->prepare($xref_sql);
my $xref_sth = $self->xref->dbc->prepare($xref_sql);
$xref_sth->execute();
......@@ -1071,7 +1065,7 @@ sub dump_interpro {
open (INTERPRO, ">" . $self->dir() . "/interpro.txt");
my $sth = $xref_dbi->prepare("SELECT * FROM interpro");
my $sth = $self->xref->dbc->prepare("SELECT * FROM interpro");
$sth->execute();
my ($interpro, $pfam);
......@@ -1096,7 +1090,7 @@ sub build_stable_id_to_internal_id_hash {
print "Caching stable ID -> internal ID links for ${type}s\n";
my $core_sql = "SELECT ${type}_id, stable_id FROM ${type}_stable_id" ;
my $sth = $core_dbi->prepare($core_sql);
my $sth = $self->dbc->prepare($core_sql);
$sth->execute();
my ($internal_id, $stable_id);
$sth->bind_columns(\$internal_id, \$stable_id);
......@@ -1158,7 +1152,7 @@ sub get_analysis_id {
my $logic_name = $typeToLogicName{lc($ensembl_type)};
my $sth = $core_dbi->prepare("SELECT analysis_id FROM analysis WHERE logic_name='" . $logic_name ."'");
my $sth = $self->dbc->prepare("SELECT analysis_id FROM analysis WHERE logic_name='" . $logic_name ."'");
$sth->execute();
my $analysis_id;
......@@ -1171,7 +1165,7 @@ sub get_analysis_id {
} else {
print "No analysis with logic_name $logic_name found, creating ...\n";
$sth = $core_dbi->prepare("INSERT INTO analysis (logic_name, created) VALUES ('" . $logic_name. "', NOW())");
$sth = $self->dbc->prepare("INSERT INTO analysis (logic_name, created) VALUES ('" . $logic_name. "', NOW())");
# TODO - other fields in analysis table
$sth->execute();
$analysis_id = $sth->{'mysql_insertid'};
......@@ -1232,7 +1226,7 @@ sub dump_core_xrefs {
my $sql = "SELECT * FROM xref WHERE xref_id $id_str";
my $xref_sth = $xref_dbi->prepare($sql);
my $xref_sth = $self->xref->dbc->prepare($sql);
$xref_sth->execute();
my ($xref_id, $accession, $version, $label, $description, $source_id, $species_id, $master_xref_id, $linkage_annotation);
......@@ -1262,7 +1256,7 @@ sub dump_core_xrefs {
$sql = "SELECT DISTINCT(x.xref_id), dx.master_xref_id, x.accession, x.label, x.description, x.source_id, x.version, dx.linkage_annotation FROM dependent_xref dx, xref x WHERE x.xref_id=dx.dependent_xref_id AND master_xref_id $id_str";
my $dep_sth = $xref_dbi->prepare($sql);
my $dep_sth = $self->xref->dbc->prepare($sql);
$dep_sth->execute();
$dep_sth->bind_columns(\$xref_id, \$master_xref_id, \$accession, \$label, \$description, \$source_id, \$version, \$linkage_annotation);
......@@ -1312,7 +1306,7 @@ sub dump_core_xrefs {
# Now get the synonyms for each of these xrefs and write them to the external_synonym table
$sql = "SELECT DISTINCT xref_id, synonym FROM synonym WHERE xref_id $id_str";
my $syn_sth = $xref_dbi->prepare($sql);
my $syn_sth = $self->xref->dbc->prepare($sql);
$syn_sth->execute();
$syn_sth->bind_columns(\$xref_id, \$accession);
......@@ -1336,7 +1330,7 @@ sub dump_core_xrefs {
# calculate display_xref_ids for transcripts and genes
my $transcript_display_xrefs = $self->build_transcript_display_xrefs($xref_id_offset);
build_genes_to_transcripts();
$self->build_genes_to_transcripts();
$self->build_gene_display_xrefs($transcript_display_xrefs);
......@@ -1397,7 +1391,7 @@ sub build_transcript_display_xrefs {
# note %xref_to_source is global
print "Building xref->source mapping table\n";
my $sql = "SELECT x.xref_id, s.name FROM source s, xref x WHERE x.source_id=s.source_id";
my $sth = $xref_dbi->prepare($sql);
my $sth = $self->xref->dbc->prepare($sql);
$sth->execute();
my ($xref_id, $source_name);
......@@ -1412,7 +1406,7 @@ sub build_transcript_display_xrefs {
# Cache the list of translation->transcript mappings & vice versa
# Nte variables are global
print "Building translation to transcript mappings\n";
my $sth = $core_dbi->prepare("SELECT translation_id, transcript_id FROM translation");
my $sth = $self->dbc->prepare("SELECT translation_id, transcript_id FROM translation");
$sth->execute();
my ($translation_id, $transcript_id);
......@@ -1577,13 +1571,15 @@ sub build_gene_display_xrefs {
my $dir = $self->dir();
my $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(-species => $self->species(),
-dbname => $self->dbname(),
-host => $self->host(),
-port => $self->port(),
-pass => $self->password(),
-user => $self->user(),
-group => 'core');
# my $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(-species => $self->species(),
# -dbname => $self->dbc->dbname(),
# -host => $self->host(),
# -port => $self->port(),
# -pass => $self->password(),
# -user => $self->user(),
# -group => 'core');
my $db = $self;
my $ta = $db->get_TranscriptAdaptor();
print "Assigning display_xrefs to genes\n";
......@@ -1682,7 +1678,7 @@ sub build_genes_to_transcripts {
print "Getting transcripts for all genes\n";
my $sql = "SELECT gene_id, transcript_id FROM transcript";
my $sth = $core_dbi->prepare($sql);
my $sth = $self->dbc->prepare($sql);
$sth->execute();
my ($gene_id, $transcript_id);
......@@ -1745,7 +1741,7 @@ sub map_source_to_external_db {
my %source_to_external_db;
# get all sources
my $sth = $self->xref->dbi()->prepare("SELECT source_id, name FROM source");
my $sth = $self->xref->dbc->prepare("SELECT source_id, name FROM source");
$sth->execute();
my ($source_id, $source_name);
$sth->bind_columns(\$source_id, \$source_name);
......@@ -1754,7 +1750,7 @@ sub map_source_to_external_db {
# find appropriate external_db_id for each one
my $sql = "SELECT external_db_id FROM external_db WHERE db_name=?";
my $core_sth = $core_dbi->prepare($sql);
my $core_sth = $self->dbc->prepare($sql);
$core_sth->execute($source_name);
my @row = $core_sth->fetchrow_array();
......@@ -1792,14 +1788,14 @@ sub do_upload {
if ($deleteexisting) {
$sth = $core_dbi->prepare("DELETE FROM $table");
$sth = $self->dbc->prepare("DELETE FROM $table");
print "Deleting existing data in $table\n";
$sth->execute();
}
# don't seem to be able to use prepared statements here
$sth = $core_dbi->prepare("LOAD DATA INFILE \'$file\' IGNORE INTO TABLE $table");
$sth = $self->dbc->prepare("LOAD DATA INFILE \'$file\' IGNORE INTO TABLE $table");
print "Uploading data in $file to $table\n";
$sth->execute();
......@@ -1813,17 +1809,17 @@ sub do_upload {
if ($deleteexisting) {
$sth = $core_dbi->prepare("UPDATE $table SET display_xref_id=NULL");
$sth = $self->dbc->prepare("UPDATE $table SET display_xref_id=NULL");
print "Setting all existing display_xref_id in $table to null\n";
$sth->execute();
}
print "Setting $table display_xrefs from $file\n";
my $str = "mysql -u " .$self->user() ." -p" . $self->password() . " -h " . $self->host() ." -P " . $self->port() . " " .$self->dbname() . " < $file";
my $str = "mysql -u " .$self->user() ." -p" . $self->password() . " -h " . $self->host() ." -P " . $self->port() . " " .$self->dbc->dbname() . " < $file";
system $str;
#$sth = $core_dbi->prepare("UPDATE $table SET display_xref_id=? WHERE ${table}_id=?");
#$sth = $self->dbc->prepare("UPDATE $table SET display_xref_id=? WHERE ${table}_id=?");
#open(DX_TXT, $file);
#while (<DX_TXT>) {
# my ($xref_id, $object_id) = split;
......@@ -1871,7 +1867,7 @@ sub build_gene_descriptions {
print "Getting & filtering xref descriptions\n";
# Note %xref_descriptions & %xref_accessions are global
my $sth = $self->xref->dbi()->prepare("SELECT xref_id, accession, description FROM xref");
my $sth = $self->xref->dbc->prepare("SELECT xref_id, accession, description FROM xref");
$sth->execute();
my ($xref_id, $accession, $description);
$sth->bind_columns(\$xref_id, \$accession, \$description);
......@@ -2049,14 +2045,16 @@ sub compare_xref_descriptions {
# load external_db (if it's empty) from ../external_db/external_dbs.txt
sub upload_external_db {
my ($self) = @_;
my $row = @{$core_dbi->selectall_arrayref("SELECT COUNT(*) FROM external_db")}[0];
$self->dbc->connect();
my $row = @{$self->dbc->db_handle->selectall_arrayref("SELECT COUNT(*) FROM external_db")}[0];
my $count = @{$row}[0];
if ($count == 0) {
my $edb = cwd() . "/../external_db/external_dbs.txt";
print "external_db table is empty, uploading from $edb\n";
my $edb_sth = $core_dbi->prepare("LOAD DATA INFILE \'$edb\' INTO TABLE external_db");
my $edb_sth = $self->dbc->prepare("LOAD DATA INFILE \'$edb\' INTO TABLE external_db");
$edb_sth->execute();
} else {
print "external_db table already has $count rows, will not change it\n";
......
package XrefMapper::db;
use vars '@ISA';
use Bio::EnsEMBL::DBSQL::DBAdaptor;
use Bio::EnsEMBL::Registry;
use Bio::EnsEMBL::Utils::ConfigRegistry;
=head2 new
Example : $db = new XrefMapper::db();
Description: Creates new db object.
Returntype : XrefMapper::db;
Exceptions : none
Caller : general
=cut
sub new {
my($class) = @_;
my $self ={};
bless $self,$class;
return $self;
}
=head2 species
Arg [1] : (optional) string $arg
The new value of the species used by this connection.
Example : $host = $db->species()
Description: Getter/Setter for the species of to use for
this connection. There is currently no point in setting
this value after the connection has already been established
by the constructor.
Returntype : string
Exceptions : none
Caller : new
=cut
sub species {
my ($self, $arg) = @_;
(defined $arg) &&
($self->{_species} = $arg );
return $self->{_species};
}
=head2 host
Arg [1] : (optional) string $arg
The new value of the host used by this connection.
Example : $host = $db->host()
Description: Getter/Setter for the domain name of the database host use by
this connection. There is currently no point in setting
this value after the connection has already been established
by the constructor.
Returntype : string
Exceptions : none
Caller : new
=cut
sub host {
my ($self, $arg) = @_;
(defined $arg) &&
($self->{_host} = $arg );
return $self->{_host};
}
=head2 port
Arg [1] : (optional) int $arg
the TCP or UDP port to use to connect to the database
Example : $port = $db->port();
Description: Getter / Setter for the port this connection uses to communicate
to the database daemon. There currently is no point in
setting this value after the connection has already been
established by the constructor.
Returntype : string
Exceptions : none
Caller : new
=cut
sub port {
my ($self, $arg) = @_;
(defined $arg) &&
($self->{_port} = $arg );
return $self->{_port};
}
=head2 dbname
Arg [1] : (optional) string $arg
The new value of the database name used by this connection.
Example : $dbname = $db->dbname()
Description: Getter/Setter for the name of the database used by this
connection. There is currently no point in setting this value
after the connection has already been established by the
constructor.
Returntype : string
Exceptions : none
Caller : new
=cut
sub dbname {
my ($self, $arg) = @_;
@ISA = qw{Bio::EnsEMBL::DBSQL::DBAdaptor};
(defined $arg) &&
($self->{_dbname} = $arg );
return $self->{_dbname};
}
=head2 user
Arg [1] : (optional) string $arg
The new value of the username used by this connection.
Example : $user = $db->user()
Description: Getter/Setter for the username used by this
connection. There is currently no point in setting this value
after the connection has already been established by the
constructor.
Returntype : string
Exceptions : none
Caller : new
=cut
sub user {
my ($self, $arg) = @_;
(defined $arg) &&
($self->{_user} = $arg );
return $self->{_user};
}
=head2 password
Arg [1] : (optional) string $arg
The new value of the password used by this connection.
Example : $pass = $db->password()
Description: Getter/Setter for the password of to use for
this connection. There is currently no point in setting
this value after the connection has already been established
by the constructor.
Returntype : string
Exceptions : none
Caller : new
=cut
sub password {
my ($self, $arg) = @_;
(defined $arg) &&
($self->{_password} = $arg );
return $self->{_password};
}
=head2 dir
......@@ -231,27 +78,5 @@ sub process_dir {
return $dir;
}
=head2 dbi
Example : $dbi = $db->dbi()
Description: creates a new dbi connection
Returntype : DBI
Exceptions : will die if database is not connected to properly.
Caller : general
=cut
sub dbi {
my $self = shift;
my $dbi = DBI->connect("dbi:mysql:host=".$self->host().";port=".$self->port().";database=".$self->dbname(),
$self->user,
$self->password,
{'RaiseError' => 1}) || die "Can't connect to database";
return $dbi;
}
1;
......@@ -48,6 +48,9 @@ my $xref=undef;
my $species=undef;
my $type;
my %xref_hash=();
my %species_hash=();
while( my $line = <FILE> ) {
chomp($line);
......@@ -58,80 +61,136 @@ while( my $line = <FILE> ) {
my ($key, $value) = split("=",$line);
if($key eq "species"){
$type = "species";
if(defined($species)){
push @all_species, $species;
$species = undef;
}
if ($value !~ /_/) {
print STDERR "\'$value\' is not a recognised species - please use full species name (e.g. homo_sapiens) in $file\n";
exit(1);
}
eval "require XrefMapper::$value";
my $module;
if($@) {
warn("Did not find a specific mapping module XrefMapper::$value - using XrefMapper::BasicMapper instead\n");
require XrefMapper::BasicMapper;
$module = "BasicMapper";
} else{
$module = $value;
}
no strict 'refs';
$species = "XrefMapper::$module"->new();
$species->species($value);
if(defined($dumpcheck)){
$species->dumpcheck("yes");
}
if(defined($maxdump)){
$species->maxdump($maxdump);
}
if(defined($use_existing_mappings)){
$species->use_existing_mappings("yes");
}
$species_hash{'species'} = $value;
}
elsif($key eq "xref"){
$type = "xref";
$xref = new XrefMapper::db();
}
elsif($type eq "species"){ # processing species data
$species->$key($value);
$species_hash{lc($key)} = $value;
}
elsif($type eq "xref"){ # processing xref data
$xref->$key($value);
$xref_hash{lc($key)} = $value;
}
}
if(defined($xref_hash{host})){
my ($host, $user, $dbname, $pass, $port);
$host = $xref_hash{'host'};
$user = $xref_hash{'user'};
$dbname = $xref_hash{'dbname'};
if(defined($xref_hash{'pass'})){
$pass = $xref_hash{'pass'};
}
else{
$pass = '';
}
if(defined($xref_hash{'port'})){
$port = $xref_hash{'port'};
}
else{
$port = 3306;
}
$xref = new XrefMapper::db(-host => $host,
-port => $port,
-user => $user,
-pass => $pass,
-group => 'core',
-dbname => $dbname);
if(defined($xref_hash{'dir'})){
$xref->dir($xref_hash{'dir'});
}
}
if(defined($species)){
push @all_species, $species;
else{
die "No host name given for xref\n";
}
my $i = 1;
if(defined($species_hash{'species'})){
my $value = $species_hash{'species'};
if ($value !~ /_/) {
print STDERR "\'$value\' is not a recognised species - please use full species name (e.g. homo_sapiens) in $file\n";
exit(1);
}
eval "require XrefMapper::$value";
my $module;
if($@) {
warn("Did not find a specific mapping module XrefMapper::$value - using XrefMapper::BasicMapper instead\n");
require XrefMapper::BasicMapper;
$module = "BasicMapper";
} else{
$module = $value;
}
no strict 'refs';
my ($host, $port, $user, $dbname, $pass);
$host = $species_hash{'host'};
$user = $species_hash{'user'};
$dbname = $species_hash{'dbname'};
if(defined($species_hash{'pass'})){
$pass = $species_hash{'pass'};
}
else{
$pass = '';
}
if(defined($species_hash{'port'})){
$port = $species_hash{'port'};
}
else{
$port = '';
}
$species = "XrefMapper::$module"->new(-host => $host,
-port => $port,
-user => $user,
-pass => $pass,
-species => $value,
-group => 'core',
-dbname => $dbname);
if(defined($species_hash{'dir'})){
$species->dir($species_hash{'dir'});
}
$species->species($value);
if(defined($dumpcheck)){
$species->dumpcheck("yes");
}
if(defined($maxdump)){
$species->maxdump($maxdump);
}
if(defined($use_existing_mappings)){
$species->use_existing_mappings("yes");
}
for my $species ( @all_species ) {
}
else{
die "No Species given\n";
}
$species->xref($xref); # attach xref object to species object
print "\nDumping xref & Ensembl sequences" . info($i, @all_species) . "\n";
$species->dump_seqs($location);
$species->xref($xref); # attach xref object to species object
print "\nChecking external_db table\n" if ($upload);
$species->upload_external_db() if ($upload);
print "\nDumping xref & Ensembl sequences\n";
$species->dump_seqs($location);
print "\nRunning mapping" . info($i, @all_species) . "\n";
$species->build_list_and_map();
print "\nChecking external_db table\n" if ($upload);
$species->upload_external_db() if ($upload);
print "\nParsing mapping output" . info($i, @all_species) . "\n";
$species->parse_mappings();
print "\nRunning mapping\n";
$species->build_list_and_map();
print "\nUploading xrefs" . info($i, @all_species) . "\n" if ($upload);
$species->do_upload($deleteexisting) if ($upload);
print "\nParsing mapping output\n";
$species->parse_mappings();
$i++;
print "\nUploading xrefs\n" if ($upload);
$species->do_upload($deleteexisting) if ($upload);
}
print STDERR "*** All finished ***\n";
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment