1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/2f3e80ded864/
changeset: 2f3e80ded864
user: greg
date: 2013-01-22 19:24:23
summary: Handle invalid repository dependency definitions contained in tool shed repositories.
affected #: 2 files
diff -r 0e064a23864c846483b35f893cf0a769dedf24f1 -r 2f3e80ded864f29b27ad3af71f4887f23293297c lib/galaxy/util/shed_util_common.py
--- a/lib/galaxy/util/shed_util_common.py
+++ b/lib/galaxy/util/shed_util_common.py
@@ -1888,6 +1888,7 @@
handle_next_repository_dependency( trans, key_rd_dicts_to_be_processed, all_repository_dependencies, handled_key_rd_dicts, circular_repository_dependencies )
elif key_rd_dicts_to_be_processed:
handle_next_repository_dependency( trans, key_rd_dicts_to_be_processed, all_repository_dependencies, handled_key_rd_dicts, circular_repository_dependencies )
+ all_repository_dependencies = prune_invalid_repository_dependencies( all_repository_dependencies )
return all_repository_dependencies
def get_repository_dependency_as_key( repository_dependency ):
return container_util.generate_repository_dependencies_key_for_repository( repository_dependency[ 0 ],
@@ -2181,12 +2182,12 @@
for key_rd_dict in key_rd_dicts:
key = key_rd_dict.keys()[ 0 ]
repository_dependency = key_rd_dict[ key ]
- toolshed, name, owner, changeset_revision = repository_dependency
- if tool_shed_is_this_tool_shed( toolshed ):
- repository = get_repository_by_name_and_owner( trans, name, owner )
+ rd_toolshed, rd_name, rd_owner, rd_changeset_revision = repository_dependency
+ if tool_shed_is_this_tool_shed( rd_toolshed ):
+ repository = get_repository_by_name_and_owner( trans, rd_name, rd_owner )
repository_metadata = get_repository_metadata_by_repository_id_changset_revision( trans,
trans.security.encode_id( repository.id ),
- changeset_revision )
+ rd_changeset_revision )
if repository_metadata:
# The repository changeset_revision is installable, so no updates are available.
new_key_rd_dict = {}
@@ -2196,15 +2197,20 @@
# The repository changeset_revision is no longer installable, so see if there's been an update.
repo_dir = repository.repo_path( trans.app )
repo = hg.repository( get_configured_ui(), repo_dir )
- changeset_revision = get_next_downloadable_changeset_revision( repository, repo, changeset_revision )
+ changeset_revision = get_next_downloadable_changeset_revision( repository, repo, rd_changeset_revision )
repository_metadata = get_repository_metadata_by_repository_id_changset_revision( trans,
trans.security.encode_id( repository.id ),
changeset_revision )
if repository_metadata:
new_key_rd_dict = {}
- new_key_rd_dict[ key ] = [ toolshed, name, owner, repository_metadata.changeset_revision ]
+ new_key_rd_dict[ key ] = [ rd_toolshed, rd_name, rd_owner, repository_metadata.changeset_revision ]
# We have the updated changset revision.
updated_key_rd_dicts.append( new_key_rd_dict )
+ else:
+ toolshed, repository_name, repository_owner, repository_changeset_revision = container_util.get_components_from_key( key )
+ message = "The revision %s defined for repository %s owned by %s is invalid, so repository dependencies defined for repository %s will be ignored." % \
+ ( str( rd_changeset_revision ), str( rd_name ), str( rd_owner ), str( repository_name ) )
+ log.debug( message )
return updated_key_rd_dicts
def get_url_from_repository_tool_shed( app, repository ):
"""
@@ -2816,6 +2822,25 @@
new_key_rd_dict[ current_repository_key ] = repository_dependency
key_rd_dicts_to_be_processed.append( new_key_rd_dict )
return filtered_current_repository_key_rd_dicts, key_rd_dicts_to_be_processed, handled_key_rd_dicts, all_repository_dependencies
+def prune_invalid_repository_dependencies( repository_dependencies ):
+ """
+ Eliminate all invalid entries in the received repository_dependencies dictionary. An entry is invalid if if the value_list of the key/value pair is
+ empty. This occurs when an invalid combination of tool shed, name , owner, changeset_revision is used and a repository_metadata reocrd is not found.
+ """
+ valid_repository_dependencies = {}
+ description = repository_dependencies.get( 'description', None )
+ root_key = repository_dependencies.get( 'root_key', None )
+ if root_key is None:
+ return valid_repository_dependencies
+ for key, value in repository_dependencies.items():
+ if key in [ 'description', 'root_key' ]:
+ continue
+ if value:
+ valid_repository_dependencies[ key ] = value
+ if valid_repository_dependencies:
+ valid_repository_dependencies[ 'description' ] = description
+ valid_repository_dependencies[ 'root_key' ] = root_key
+ return valid_repository_dependencies
def remove_dir( dir ):
if os.path.exists( dir ):
try:
diff -r 0e064a23864c846483b35f893cf0a769dedf24f1 -r 2f3e80ded864f29b27ad3af71f4887f23293297c lib/galaxy/webapps/community/controllers/repository.py
--- a/lib/galaxy/webapps/community/controllers/repository.py
+++ b/lib/galaxy/webapps/community/controllers/repository.py
@@ -1909,6 +1909,7 @@
metadata = repository_metadata.metadata
is_malicious = repository_metadata.malicious
if repository_metadata:
+ metadata = repository_metadata.metadata
# Get a dictionary of all repositories upon which the contents of the current repository_metadata record depend.
repository_dependencies = suc.get_repository_dependencies_for_changeset_revision( trans=trans,
repository=repository,
@@ -1917,6 +1918,12 @@
key_rd_dicts_to_be_processed=None,
all_repository_dependencies=None,
handled_key_rd_dicts=None )
+ if metadata:
+ if 'repository_dependencies' in metadata and not repository_dependencies:
+ message += 'The repository dependency definitions for this repository are invalid and will be ignored. Make sure valid <b>toolshed</b>, '
+ message += '<b>name</b>, <b>owner</b> and <b>changeset_revision</b> values are defined in the contained <b>repository_dependencies.xml</b> '
+ message += 'file to correct this problem.'
+ status = 'error'
if is_malicious:
if trans.app.security_agent.can_push( trans.app, trans.user, repository ):
message += malicious_error_can_push
@@ -2029,6 +2036,10 @@
key_rd_dicts_to_be_processed=None,
all_repository_dependencies=None,
handled_key_rd_dicts=None )
+ if metadata:
+ if 'repository_dependencies' in metadata and not repository_dependencies:
+ message += 'The repository dependency definitions for this repository are invalid and will be ignored.'
+ status = 'error'
else:
repository_metadata_id = None
metadata = None
@@ -2550,6 +2561,10 @@
key_rd_dicts_to_be_processed=None,
all_repository_dependencies=None,
handled_key_rd_dicts=None )
+ if metadata:
+ if 'repository_dependencies' in metadata and not repository_dependencies:
+ message += 'The repository dependency definitions for this repository are invalid and will be ignored.'
+ status = 'error'
else:
repository_metadata_id = None
metadata = None
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/0e064a23864c/
changeset: 0e064a23864c
user: jgoecks
date: 2013-01-21 15:02:56
summary: Exporting workflows: (a) remove spurious header and (b) add option to create workflow image. (b) inspired by Björn Grüning
affected #: 1 file
diff -r bb3a803c207d4e1f305982bf97bcb9019810bd83 -r 0e064a23864c846483b35f893cf0a769dedf24f1 templates/workflow/export.mako
--- a/templates/workflow/export.mako
+++ b/templates/workflow/export.mako
@@ -25,7 +25,6 @@
<h3>Export to myExperiment</h3><div class="toolForm">
- <div class="toolFormTitle">Export</div><form action="${h.url_for( action='export_to_myexp', id=trans.security.encode_id( item.id ) )}"
method="POST"><div class="form-row">
@@ -46,6 +45,13 @@
<%def name="render_more(item)">
## Add form to export to myExperiment.
${self.render_export_to_myexp(item)}
+
+ ## Add link to render as SVG image.
+ <h3>Create Image</h3>
+
+ <a href="${h.url_for( action='gen_image', id=trans.security.encode_id( item.id ) )}">
+ Create image of ${get_class_display_name( item.__class__ ).lower()} in SVG format
+ </a></%def><%def name="center_panel()">
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/34404f848979/
changeset: 34404f848979
user: greg
date: 2013-01-19 23:54:48
summary: Add missing import to update manager.
affected #: 1 file
diff -r 7d37ffe813f2a037b560af26770ffe5924ae643f -r 34404f8489792a97096b36f012fbf775cc3b382b lib/galaxy/tool_shed/update_manager.py
--- a/lib/galaxy/tool_shed/update_manager.py
+++ b/lib/galaxy/tool_shed/update_manager.py
@@ -4,6 +4,7 @@
import threading, urllib2, logging
from galaxy.util import string_as_bool
import galaxy.util.shed_util as shed_util
+from galaxy.model.orm import and_
log = logging.getLogger( __name__ )
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/50c65739cd1a/
changeset: 50c65739cd1a
user: carlfeberhard
date: 2013-01-18 22:32:05
summary: api/history_contents, index: handle hda_dict building exceptions by appending an error-state hda_dict (instead of 'fail-on-first'); history panel: handle bootstrapped and ajax hda api exceptions more gracefully, show hda api exceptions as hdas in the error state.
affected #: 4 files
diff -r 34e42ae792320b1ee2471f11f341ac55445f52e0 -r 50c65739cd1af36f48672a980db378783dffcdd5 lib/galaxy/webapps/galaxy/api/history_contents.py
--- a/lib/galaxy/webapps/galaxy/api/history_contents.py
+++ b/lib/galaxy/webapps/galaxy/api/history_contents.py
@@ -60,8 +60,20 @@
# but we(I?) need an hda collection with full data somewhere
ids = ids.split( ',' )
for hda in history.datasets:
- if trans.security.encode_id( hda.id ) in ids:
- rval.append( get_hda_dict( trans, history, hda, for_editing=True ) )
+ #TODO: curr. ordered by history, change to order from ids list
+ encoded_hda_id = trans.security.encode_id( hda.id )
+ if encoded_hda_id in ids:
+ #TODO: share code with show
+ try:
+ rval.append( get_hda_dict( trans, history, hda, for_editing=True ) )
+
+ except Exception, exc:
+ # don't fail entire list if hda err's, record and move on
+ # (making sure http recvr knows it's err'd)
+ trans.response.status = 500
+ log.error( "Error in history API at listing contents " +
+ "with history %s, hda %s: %s", history_id, encoded_hda_id, str( exc ) )
+ rval.append( self._exception_as_hda_dict( trans, encoded_hda_id, exc ) )
else:
# if no ids passed, return a _SUMMARY_ of _all_ datasets in the history
@@ -69,12 +81,14 @@
rval.append( self._summary_hda_dict( trans, history_id, hda ) )
except Exception, e:
- rval = "Error in history API at listing contents"
+ # for errors that are not specific to one hda (history lookup or summary list)
+ rval = "Error in history API at listing contents: " + str( e )
log.error( rval + ": %s, %s" % ( type( e ), str( e ) ) )
trans.response.status = 500
return rval
+ #TODO: move to model or Mixin
def _summary_hda_dict( self, trans, history_id, hda ):
"""
Returns a dictionary based on the HDA in .. _summary form::
@@ -94,6 +108,26 @@
'url' : url_for( 'history_content', history_id=history_id, id=encoded_id, ),
}
+ #TODO: move to model or Mixin
+ def _exception_as_hda_dict( self, trans, hda_id, exception ):
+ """
+ Returns a dictionary for an HDA that raised an exception when it's
+ dictionary was being built.
+ {
+ 'id' : < the encoded dataset id >,
+ 'type' : < name of the dataset >,
+ 'url' : < api url to retrieve this datasets full data >,
+ }
+ """
+ return {
+ 'id' : hda_id,
+ 'state' : trans.app.model.Dataset.states.ERROR,
+ 'visible' : True,
+ 'misc_info' : str( exception ),
+ 'misc_blurb': 'Failed to retrieve dataset information.',
+ 'error' : str( exception )
+ }
+
@web.expose_api
def show( self, trans, id, history_id, **kwd ):
"""
diff -r 34e42ae792320b1ee2471f11f341ac55445f52e0 -r 50c65739cd1af36f48672a980db378783dffcdd5 static/scripts/mvc/dataset/hda-base.js
--- a/static/scripts/mvc/dataset/hda-base.js
+++ b/static/scripts/mvc/dataset/hda-base.js
@@ -445,7 +445,7 @@
if( !this.model.get( 'purged' ) ){
parent.append( $( '<div>' + this.model.get( 'misc_blurb' ) + '</div>' ) );
}
- parent.append( ( _l( 'An error occurred running this job' ) + ': '
+ parent.append( ( _l( 'An error occurred with this dataset' ) + ': '
+ '<i>' + $.trim( this.model.get( 'misc_info' ) ) + '</i>' ) );
parent.append( this._render_primaryActionButtons(
this.defaultPrimaryActionButtonRenderers.concat([ this._render_downloadButton ])
diff -r 34e42ae792320b1ee2471f11f341ac55445f52e0 -r 50c65739cd1af36f48672a980db378783dffcdd5 static/scripts/mvc/history/history-model.js
--- a/static/scripts/mvc/history/history-model.js
+++ b/static/scripts/mvc/history/history-model.js
@@ -55,9 +55,17 @@
this.hdas = new HDACollection();
// if we've got hdas passed in the constructor, load them and set up updates if needed
- if( initialHdas && initialHdas.length ){
- this.hdas.reset( initialHdas );
- this.checkForUpdates();
+ if( initialHdas ){
+ if( _.isArray( initialHdas ) ){
+ this.hdas.reset( initialHdas );
+ this.checkForUpdates();
+
+ // handle errors in initialHdas
+ //TODO: errors from the api shouldn't be plain strings...
+ //TODO: remove when mappers and hda_dict are unified (or move to alt history)
+ } else if( _.isString( initialHdas ) && ( initialHdas.match( /error/i ) ) ){
+ alert( _l( 'Error loading bootstrapped history' ) + ':\n' + initialHdas );
+ }
}
// events
@@ -163,7 +171,7 @@
// send the changed ids (if any) to dataset collection to have them fetch their own model changes
if( changedIds.length ){
- history.updateHdas( changedIds );
+ history.fetchHdaUpdates( changedIds );
}
// set up to keep pulling if this history in run/queue state
@@ -193,16 +201,37 @@
* If it's not in the collection, addHdas will be used to create it.
* @param {String[]} hdaIds an array of the encoded ids of the hdas to get from the server.
*/
- updateHdas : function( hdaIds ){
+ fetchHdaUpdates : function( hdaIds ){
//TODO:?? move to collection? still need proper url
var history = this;
jQuery.ajax({
url : this.url() + '/contents?' + jQuery.param({ ids : hdaIds.join(',') }),
+ /**
+ * @inner
+ */
error : function( xhr, status, error ){
- var msg = 'ERROR updating hdas from api history contents:';
- history.log( msg, hdaIds, xhr, status, error );
- alert( msg + hdaIds.join(',') );
+ if( ( xhr.readyState === 0 ) && ( xhr.status === 0 ) ){ return; }
+
+ var errorJson = JSON.parse( xhr.responseText );
+ if( _.isArray( errorJson ) ){
+
+ // just for debugging/reporting purposes
+ var grouped = _.groupBy( errorJson, function( hdaData ){
+ if( _.has( hdaData, 'error' ) ){ return 'errored'; }
+ return 'ok';
+ });
+ history.log( 'fetched, errored datasets:', grouped.errored );
+
+ // the server already formats the error'd hdas in proper hda-model form
+ // so we're good to send these on
+ history.updateHdas( errorJson );
+
+ } else {
+ var msg = _l( 'ERROR updating hdas from api history contents' ) + ': ';
+ history.log( msg, hdaIds, xhr, status, error, errorJSON );
+ alert( msg + hdaIds.join(',') );
+ }
},
/** when the proper models for the requested ids are returned,
@@ -210,30 +239,41 @@
* @inner
*/
success : function( hdaDataList, status, xhr ){
- history.log( history + '.updateHdas, success:', hdaDataList, status, xhr );
- //TODO: compile new models to be added in one go
- var hdasToAdd = [];
-
- _.each( hdaDataList, function( hdaData, index ){
- var existingModel = history.hdas.get( hdaData.id );
- // if this model exists already, update it
- if( existingModel ){
- history.log( 'found existing model in list for id ' + hdaData.id + ', updating...:' );
- existingModel.set( hdaData );
-
- // if this model is new and isn't in the hda collection, cache it to be created
- } else {
- history.log( 'NO existing model for id ' + hdaData.id + ', creating...:' );
- hdasToAdd.push( hdaData );
- }
- });
- if( hdasToAdd.length ){
- history.addHdas( hdasToAdd );
- }
+ history.log( history + '.fetchHdaUpdates, success:', status, xhr );
+ history.updateHdas( hdaDataList );
}
});
},
+ /** Update the models in the hdas collection from the data given.
+ * If a model exists in the collection, set will be used with the new data.
+ * If it's not in the collection, addHdas will be used to create it.
+ * @param {Object[]} hdaDataList an array of the model data used to update.
+ */
+ updateHdas : function( hdaDataList ){
+ var history = this,
+ // models/views that need to be created
+ hdasToAdd = [];
+ history.log( history + '.updateHdas:', hdaDataList );
+
+ _.each( hdaDataList, function( hdaData, index ){
+ var existingModel = history.hdas.get( hdaData.id );
+ // if this model exists already, update it
+ if( existingModel ){
+ history.log( 'found existing model in list for id ' + hdaData.id + ', updating...:' );
+ existingModel.set( hdaData );
+
+ // if this model is new and isn't in the hda collection, cache it to be created
+ } else {
+ history.log( 'NO existing model for id ' + hdaData.id + ', creating...:' );
+ hdasToAdd.push( hdaData );
+ }
+ });
+ if( hdasToAdd.length ){
+ history.addHdas( hdasToAdd );
+ }
+ },
+
/** Add multiple hda models to the hdas collection from an array of hda data.
*/
addHdas : function( hdaDataList ){
diff -r 34e42ae792320b1ee2471f11f341ac55445f52e0 -r 50c65739cd1af36f48672a980db378783dffcdd5 templates/root/alternate_history.mako
--- a/templates/root/alternate_history.mako
+++ b/templates/root/alternate_history.mako
@@ -191,13 +191,19 @@
##TODO: api/web controllers should use common code, and this section should call that code
<%def name="get_history( id )"><%
- return trans.webapp.api_controllers[ 'histories' ].show( trans, trans.security.encode_id( id ) )
+ history_json = trans.webapp.api_controllers[ 'histories' ].show( trans, trans.security.encode_id( id ) )
+ #assert isinstance( history, dict ), (
+ # 'Bootstrapped history was expecting a dictionary: %s' %( str( history ) ) )
+ return history_json
%></%def><%def name="get_current_user()"><%
- return trans.webapp.api_controllers[ 'users' ].show( trans, 'current' )
+ user_json = trans.webapp.api_controllers[ 'users' ].show( trans, 'current' )
+ #assert isinstance( hdaDataList, list ), (
+ # 'Bootstrapped current user was expecting a dictionary: %s' %( str( user ) ) )
+ return user_json
%></%def>
@@ -207,10 +213,10 @@
if not hdas:
return '[]'
# rather just use the history.id (wo the datasets), but...
- return trans.webapp.api_controllers[ 'history_contents' ].index(
- #trans, trans.security.encode_id( history_id ),
+ hda_json = trans.webapp.api_controllers[ 'history_contents' ].index(
trans, trans.security.encode_id( history_id ),
ids=( ','.join([ trans.security.encode_id( hda.id ) for hda in hdas ]) ) )
+ return hda_json
%></%def>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/34e42ae79232/
changeset: 34e42ae79232
user: greg
date: 2013-01-18 21:46:22
summary: Filter request params to only those necessary when redirecting to monitor installing tool shed repositories.
affected #: 1 file
diff -r b238d26ca9269aec91e26370348b89ee14c3d1ae -r 34e42ae792320b1ee2471f11f341ac55445f52e0 lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py
--- a/lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py
+++ b/lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py
@@ -977,9 +977,10 @@
return trans.show_error_message( 'Invalid repository specified.' )
tool_shed_url = suc.get_url_from_repository_tool_shed( trans.app, repository )
if repository.status in [ trans.model.ToolShedRepository.installation_status.CLONING ]:
+ tool_shed_repository_ids = [ repository_id ]
return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
action='monitor_repository_installation',
- **kwd ) )
+ tool_shed_repository_ids=tool_shed_repository_ids ) )
if repository.can_install and operation == 'install':
# Send a request to the tool shed to install the repository.
url = suc.url_join( tool_shed_url,
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/03d2ce228f7e/
changeset: 03d2ce228f7e
user: dannon
date: 2013-01-18 20:38:51
summary: Cloud Launch: Adjust event triggers to prevent redundant (though harmless) get_account_info invocations. Change get_account_info to POST vs GET. Adjust Cluster List creation to *always* insert the "New Cluster" option. Prevent nonexisting existing instance value from crashing zone detection during submission.
affected #: 1 file
diff -r 98f724202d9d3cea035d7de04d89465bcf3092b1 -r 03d2ce228f7e939871ff5d1d0564eebdda2cbb36 templates/cloud/index.mako
--- a/templates/cloud/index.mako
+++ b/templates/cloud/index.mako
@@ -76,22 +76,24 @@
}
});
//When id_secret and id_key are complete, submit to get_account_info
- $("#id_secret, #id_key_id").bind("change paste keyup input propertychange", function(){
+ $("#id_secret, #id_key_id").bind("paste input propertychange", function(){
secret_el = $("#id_secret");
key_el = $("#id_key_id");
if (secret_el.val().length === 40 && key_el.val().length === 20){
//Submit these to get_account_info, unhide fields, and update as appropriate
- $.getJSON(ACCOUNT_URL,
- {key_id: key_el.val(),secret:secret_el.val()},
- function(result){
+ $.ajax({type: "POST",
+ url: ACCOUNT_URL,
+ dataType: 'json',
+ data: {key_id: key_el.val(),secret:secret_el.val()},
+ success: function(result){
cloudlaunch_clusters = result.clusters;
var kplist = $("#id_keypair");
var clusterlist = $("#id_existing_instance");
kplist.find('option').remove();
clusterlist.find('option').remove();
//Update fields with appropriate elements
+ clusterlist.append($('<option/>').val('New Cluster').text('New Cluster'));
if (_.size(result.clusters) > 0){
- clusterlist.append($('<option/>').val('New Cluster').text('New Cluster'));
_.each(result.clusters, function(cluster, index){
clusterlist.append($('<option/>').val(cluster.name).text(cluster.name));
});
@@ -104,7 +106,8 @@
kplist.append($('<option/>').val(keypair).text(keypair));
});
$('#hidden_options').show('fast');
- });
+ }
+ });
}
});
$('#loading_indicator').ajaxStart(function(){
@@ -130,7 +133,7 @@
//Dig up zone info for selected cluster, set hidden input.
//This is not necessary to present to the user though the interface may prove useful.
var ei_val = _.find(data, function(f_obj){return f_obj.name === 'existing_instance'});
- if( ei_val.value !== "New Cluster"){
+ if( ei_val && (ei_val.value !== "New Cluster")){
var cluster = _.find(cloudlaunch_clusters, function(cluster){return cluster.name === ei_val.value});
var zdata = _.find(data, function(f_obj){return f_obj.name === 'zone'});
zdata.value = cluster.zone;
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.