1 new commit in galaxy-central: https://bitbucket.org/galaxy/galaxy-central/commits/d842d50a6ed3/ Changeset: d842d50a6ed3 User: greg Date: 2013-06-19 22:55:28 Summary: Use a template for managing tool dependencies for a specified installed tool shed repository instead of a grid. Affected #: 8 files diff -r d4d1d086e50d70eecb13fa0b61f738f09f8eefdd -r d842d50a6ed3241b3b888c2b6324fc59e9fa3134 lib/galaxy/model/__init__.py --- a/lib/galaxy/model/__init__.py +++ b/lib/galaxy/model/__init__.py @@ -3569,7 +3569,7 @@ def repository_dependencies_being_installed( self ): required_repositories_being_installed = [] for required_repository in self.repository_dependencies: - if tool_dependency.status == ToolDependency.installation_status.INSTALLING: + if required_repository.status == self.installation_status.INSTALLING: required_repositories_being_installed.append( required_repository ) return required_repositories_being_installed @property diff -r d4d1d086e50d70eecb13fa0b61f738f09f8eefdd -r d842d50a6ed3241b3b888c2b6324fc59e9fa3134 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 @@ -509,7 +509,7 @@ message = 'All of the selected tool dependencies are already installed.' status = 'error' return trans.response.send_redirect( web.url_for( controller='admin_toolshed', - action='manage_tool_dependencies', + action='manage_repository_tool_dependencies', tool_dependency_ids=tool_dependency_ids, status=status, message=message ) ) @@ -546,62 +546,6 @@ @web.expose @web.require_admin - def manage_repository( self, trans, **kwd ): - message = kwd.get( 'message', '' ) - status = kwd.get( 'status', 'done' ) - repository_id = kwd[ 'id' ] - operation = kwd.get( 'operation', None ) - repository = suc.get_installed_tool_shed_repository( trans, repository_id ) - if not repository: - return trans.show_error_message( 'Invalid repository specified.' ) - tool_shed_url = suc.get_url_from_tool_shed( trans.app, repository.tool_shed ) - 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', - 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/install_repositories_by_revision?name=%s&owner=%s&changeset_revisions=%s&galaxy_url=%s' % \ - ( repository.name, repository.owner, repository.installed_changeset_revision, ( web.url_for( '/', qualified=True ) ) ) ) - return trans.response.send_redirect( url ) - description = kwd.get( 'description', repository.description ) - shed_tool_conf, tool_path, relative_install_dir = suc.get_tool_panel_config_tool_path_install_dir( trans.app, repository ) - if relative_install_dir: - repo_files_dir = os.path.abspath( os.path.join( tool_path, relative_install_dir, repository.name ) ) - else: - repo_files_dir = None - if repository.in_error_state: - message = "This repository is not installed correctly (see the <b>Repository installation error</b> below). Choose " - message += "<b>Reset to install</b> from the <b>Repository Actions</b> menu, correct problems if necessary and try " - message += "installing the repository again." - status = "error" - elif repository.can_install: - message = "This repository is not installed. You can install it by choosing <b>Install</b> from the <b>Repository Actions</b> menu." - status = "error" - elif kwd.get( 'edit_repository_button', False ): - if description != repository.description: - repository.description = description - trans.sa_session.add( repository ) - trans.sa_session.flush() - message = "The repository information has been updated." - containers_dict = metadata_util.populate_containers_dict_from_repository_metadata( trans=trans, - tool_shed_url=tool_shed_url, - tool_path=tool_path, - repository=repository, - reinstalling=False, - required_repo_info_dicts=None ) - return trans.fill_template( '/admin/tool_shed_repository/manage_repository.mako', - repository=repository, - description=description, - repo_files_dir=repo_files_dir, - containers_dict=containers_dict, - message=message, - status=status ) - - @web.expose - @web.require_admin def manage_repositories( self, trans, **kwd ): message = kwd.get( 'message', '' ) status = kwd.get( 'status', 'done' ) @@ -676,35 +620,69 @@ @web.expose @web.require_admin - def manage_tool_dependencies( self, trans, **kwd ): + def manage_repository( self, trans, **kwd ): + message = kwd.get( 'message', '' ) + status = kwd.get( 'status', 'done' ) + repository_id = kwd[ 'id' ] + operation = kwd.get( 'operation', None ) + repository = suc.get_installed_tool_shed_repository( trans, repository_id ) + if not repository: + return trans.show_error_message( 'Invalid repository specified.' ) + tool_shed_url = suc.get_url_from_tool_shed( trans.app, repository.tool_shed ) + 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', + 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/install_repositories_by_revision?name=%s&owner=%s&changeset_revisions=%s&galaxy_url=%s' % \ + ( repository.name, repository.owner, repository.installed_changeset_revision, ( web.url_for( '/', qualified=True ) ) ) ) + return trans.response.send_redirect( url ) + description = kwd.get( 'description', repository.description ) + shed_tool_conf, tool_path, relative_install_dir = suc.get_tool_panel_config_tool_path_install_dir( trans.app, repository ) + if relative_install_dir: + repo_files_dir = os.path.abspath( os.path.join( tool_path, relative_install_dir, repository.name ) ) + else: + repo_files_dir = None + if repository.in_error_state: + message = "This repository is not installed correctly (see the <b>Repository installation error</b> below). Choose " + message += "<b>Reset to install</b> from the <b>Repository Actions</b> menu, correct problems if necessary and try " + message += "installing the repository again." + status = "error" + elif repository.can_install: + message = "This repository is not installed. You can install it by choosing <b>Install</b> from the <b>Repository Actions</b> menu." + status = "error" + elif kwd.get( 'edit_repository_button', False ): + if description != repository.description: + repository.description = description + trans.sa_session.add( repository ) + trans.sa_session.flush() + message = "The repository information has been updated." + containers_dict = metadata_util.populate_containers_dict_from_repository_metadata( trans=trans, + tool_shed_url=tool_shed_url, + tool_path=tool_path, + repository=repository, + reinstalling=False, + required_repo_info_dicts=None ) + return trans.fill_template( '/admin/tool_shed_repository/manage_repository.mako', + repository=repository, + description=description, + repo_files_dir=repo_files_dir, + containers_dict=containers_dict, + message=message, + status=status ) + + @web.expose + @web.require_admin + def manage_repository_tool_dependencies( self, trans, **kwd ): message = kwd.get( 'message', '' ) status = kwd.get( 'status', 'done' ) tool_dependency_ids = tool_dependency_util.get_tool_dependency_ids( as_string=False, **kwd ) # We need a tool_shed_repository, so get it from one of the tool_dependencies. tool_dependency = tool_dependency_util.get_tool_dependency( trans, tool_dependency_ids[ 0 ] ) tool_shed_repository = tool_dependency.tool_shed_repository - self.tool_dependency_grid.title = "Tool shed repository '%s' tool dependencies" % tool_shed_repository.name - self.tool_dependency_grid.global_actions = \ - [ grids.GridAction( label='Manage repository', - url_args=dict( controller='admin_toolshed', - action='manage_repository', - id=trans.security.encode_id( tool_shed_repository.id ) ) ), - grids.GridAction( label='Browse repository', - url_args=dict( controller='admin_toolshed', - action='browse_repository', - id=trans.security.encode_id( tool_shed_repository.id ) ) ), - grids.GridAction( label='Get repository updates', - url_args=dict( controller='admin_toolshed', - action='check_for_updates', - id=trans.security.encode_id( tool_shed_repository.id ) ) ), - grids.GridAction( label='Set tool versions', - url_args=dict( controller='admin_toolshed', - action='set_tool_versions', - id=trans.security.encode_id( tool_shed_repository.id ) ) ), - grids.GridAction( label='Deactivate or uninstall repository', - url_args=dict( controller='admin_toolshed', - action='deactivate_or_uninstall_repository', - id=trans.security.encode_id( tool_shed_repository.id ) ) ) ] if 'operation' in kwd: operation = kwd[ 'operation' ].lower() if not tool_dependency_ids: @@ -713,7 +691,7 @@ kwd[ 'status' ] = 'error' del kwd[ 'operation' ] return trans.response.send_redirect( web.url_for( controller='admin_toolshed', - action='manage_tool_dependencies', + action='manage_installed_tool_dependencies', **kwd ) ) if operation == 'browse': return trans.response.send_redirect( web.url_for( controller='admin_toolshed', @@ -750,8 +728,74 @@ message = 'Set the value of your <b>tool_dependency_dir</b> setting in your Galaxy config file (universe_wsgi.ini) ' message += ' and restart your Galaxy server to install tool dependencies.' kwd[ 'message' ] = message - kwd[ 'status' ] = 'error' - return self.tool_dependency_grid( trans, **kwd ) + kwd[ 'status' ] = 'error' + installed_tool_dependencies_select_field = suc.build_tool_dependencies_select_field( trans, + tool_shed_repository=tool_shed_repository, + name='tool_dependency_ids', + uninstalled=False ) + uninstalled_tool_dependencies_select_field = suc.build_tool_dependencies_select_field( trans, + tool_shed_repository=tool_shed_repository, + name='tool_dependency_ids', + uninstalled=True ) + return trans.fill_template( '/admin/tool_shed_repository/manage_repository_tool_dependencies.mako', + repository=tool_shed_repository, + installed_tool_dependencies_select_field=installed_tool_dependencies_select_field, + uninstalled_tool_dependencies_select_field=uninstalled_tool_dependencies_select_field, + message=message, + status=status ) + + @web.expose + @web.require_admin + def manage_tool_dependencies( self, trans, **kwd ): + # This method is called when tool dependencies are being installed. See the related manage_repository_tool-dependencies + # method for managing the tool dependencies for a specified installed tool shed repository. + message = kwd.get( 'message', '' ) + status = kwd.get( 'status', 'done' ) + tool_dependency_ids = tool_dependency_util.get_tool_dependency_ids( as_string=False, **kwd ) + # We need a tool_shed_repository, so get it from one of the tool_dependencies. + tool_dependency = tool_dependency_util.get_tool_dependency( trans, tool_dependency_ids[ 0 ] ) + tool_shed_repository = tool_dependency.tool_shed_repository + self.tool_dependency_grid.title = "Tool shed repository '%s' tool dependencies" % tool_shed_repository.name + if 'operation' in kwd: + operation = kwd[ 'operation' ].lower() + if not tool_dependency_ids: + message = 'Select at least 1 tool dependency to %s.' % operation + kwd[ 'message' ] = message + kwd[ 'status' ] = 'error' + del kwd[ 'operation' ] + return trans.response.send_redirect( web.url_for( controller='admin_toolshed', + action='manage_tool_dependencies', + **kwd ) ) + if operation == 'browse': + return trans.response.send_redirect( web.url_for( controller='admin_toolshed', + action='browse_tool_dependency', + **kwd ) ) + elif operation == "install": + if trans.app.config.tool_dependency_dir: + tool_dependencies_for_installation = [] + for tool_dependency_id in tool_dependency_ids: + tool_dependency = tool_dependency_util.get_tool_dependency( trans, tool_dependency_id ) + if tool_dependency.status in [ trans.model.ToolDependency.installation_status.NEVER_INSTALLED, + trans.model.ToolDependency.installation_status.UNINSTALLED ]: + tool_dependencies_for_installation.append( tool_dependency ) + if tool_dependencies_for_installation: + self.initiate_tool_dependency_installation( trans, tool_dependencies_for_installation ) + else: + kwd[ 'message' ] = 'All selected tool dependencies are already installed.' + kwd[ 'status' ] = 'error' + else: + message = 'Set the value of your <b>tool_dependency_dir</b> setting in your Galaxy config file (universe_wsgi.ini) ' + message += ' and restart your Galaxy server to install tool dependencies.' + kwd[ 'message' ] = message + kwd[ 'status' ] = 'error' + # Redirect if no tool dependencies are in the process of being installed. + if tool_shed_repository.tool_dependencies_being_installed: + return self.tool_dependency_grid( trans, **kwd ) + return trans.response.send_redirect( web.url_for( controller='admin_toolshed', + action='manage_repository_tool_dependencies', + tool_dependency_ids=tool_dependency_ids, + message=message, + status=status ) ) @web.expose @web.require_admin @@ -1449,7 +1493,7 @@ message = "These tool dependencies have been uninstalled: %s" % ','.join( td.name for td in tool_dependencies_for_uninstallation ) td_ids = [ trans.security.encode_id( td.id ) for td in tool_shed_repository.tool_dependencies ] return trans.response.send_redirect( web.url_for( controller='admin_toolshed', - action='manage_tool_dependencies', + action='manage_repository_tool_dependencies', tool_dependency_ids=td_ids, status=status, message=message ) ) diff -r d4d1d086e50d70eecb13fa0b61f738f09f8eefdd -r d842d50a6ed3241b3b888c2b6324fc59e9fa3134 lib/tool_shed/galaxy_install/grids/admin_toolshed_grids.py --- a/lib/tool_shed/galaxy_install/grids/admin_toolshed_grids.py +++ b/lib/tool_shed/galaxy_install/grids/admin_toolshed_grids.py @@ -319,11 +319,11 @@ use_paging = False columns = [ NameColumn( "Name", - link=( lambda item: iff( item.status in \ - [ model.ToolDependency.installation_status.NEVER_INSTALLED, - model.ToolDependency.installation_status.INSTALLING, - model.ToolDependency.installation_status.UNINSTALLED ], \ - None, dict( action="manage_tool_dependencies", operation='browse', id=item.id ) ) ), + link=( lambda item: iff( item.status in [ model.ToolDependency.installation_status.NEVER_INSTALLED, + model.ToolDependency.installation_status.INSTALLING, + model.ToolDependency.installation_status.UNINSTALLED ], + None, + dict( action="manage_tool_dependencies", operation='browse', id=item.id ) ) ), filterable="advanced" ), VersionColumn( "Version", filterable="advanced" ), @@ -332,17 +332,6 @@ StatusColumn( "Installation Status", filterable="advanced" ), ] - operations = [ - grids.GridOperation( "Install", - allow_multiple=True, - condition=( lambda item: item.status in [ model.ToolDependency.installation_status.NEVER_INSTALLED, - model.ToolDependency.installation_status.UNINSTALLED ] ) ), - grids.GridOperation( "Uninstall", - allow_multiple=True, - allow_popup=False, - condition=( lambda item: item.status in [ model.ToolDependency.installation_status.INSTALLED, - model.ToolDependency.installation_status.ERROR ] ) ) - ] def build_initial_query( self, trans, **kwd ): tool_dependency_ids = tool_dependency_util.get_tool_dependency_ids( as_string=False, **kwd ) diff -r d4d1d086e50d70eecb13fa0b61f738f09f8eefdd -r d842d50a6ed3241b3b888c2b6324fc59e9fa3134 lib/tool_shed/util/shed_util_common.py --- a/lib/tool_shed/util/shed_util_common.py +++ b/lib/tool_shed/util/shed_util_common.py @@ -135,6 +135,17 @@ repositories_select_field.add_option( option_label, option_value ) return repositories_select_field +def build_tool_dependencies_select_field( trans, tool_shed_repository, name, multiple=True, display='checkboxes', uninstalled=False ): + """Method called from Galaxy to generate the current list of tool dependency ids for an installed tool shed repository.""" + tool_dependencies_select_field = SelectField( name=name, multiple=multiple, display=display ) + for tool_dependency in tool_shed_repository.tool_dependencies: + if uninstalled and tool_dependency.status != trans.model.ToolDependency.installation_status.UNINSTALLED: + continue + option_label = '%s version %s' % ( str( tool_dependency.name ), str( tool_dependency.version ) ) + option_value = trans.security.encode_id( tool_dependency.id ) + tool_dependencies_select_field.add_option( option_label, option_value ) + return tool_dependencies_select_field + def changeset_is_malicious( trans, id, changeset_revision, **kwd ): """Check the malicious flag in repository metadata for a specified change set""" repository_metadata = get_repository_metadata_by_changeset_revision( trans, id, changeset_revision ) diff -r d4d1d086e50d70eecb13fa0b61f738f09f8eefdd -r d842d50a6ed3241b3b888c2b6324fc59e9fa3134 lib/tool_shed/util/workflow_util.py --- a/lib/tool_shed/util/workflow_util.py +++ b/lib/tool_shed/util/workflow_util.py @@ -385,13 +385,6 @@ workflow.has_errors = True # Stick this in the step temporarily. step.temp_input_connections = step_dict[ 'input_connections' ] - - # This should be considered a *temporary* hack. - # Usually we'd use the UsesAnnotation mixin, but - # that's not possible here. This entire module - # needs to die and get replaced with the regular - # galaxy/workflow methods. - # See WORKFLOW_REFACTOR below. annotation = step_dict.get( 'annotation', '') if annotation: annotation = sanitize_html( annotation, 'utf-8', 'text/html' ) @@ -405,8 +398,6 @@ trans.model.PostJobAction( pja_dict[ 'action_type' ], step, pja_dict[ 'output_name' ], pja_dict[ 'action_arguments' ] ) - # End temporary hack - steps.append( step ) steps_by_external_id[ step_dict[ 'id' ] ] = step # Second pass to deal with connections between steps. @@ -444,18 +435,12 @@ workflow.stored_workflow = stored stored.latest_workflow = workflow stored.user = trans.user - - # One more temporary hack like above to support workflow level annotations. - # Same caveats. - # WORKFLOW_REFACTOR if workflow_dict and workflow_dict.get('annotation',''): annotation = sanitize_html( workflow_dict['annotation'], 'utf-8', 'text/html' ) new_annotation = trans.model.StoredWorkflowAnnotationAssociation() new_annotation.annotation = annotation new_annotation.user = trans.user stored.annotations.append(new_annotation) - # End temporary hack - trans.sa_session.add( stored ) trans.sa_session.flush() # Add a new entry to the Workflows menu. diff -r d4d1d086e50d70eecb13fa0b61f738f09f8eefdd -r d842d50a6ed3241b3b888c2b6324fc59e9fa3134 templates/admin/tool_shed_repository/manage_repository_tool_dependencies.mako --- /dev/null +++ b/templates/admin/tool_shed_repository/manage_repository_tool_dependencies.mako @@ -0,0 +1,104 @@ +<%inherit file="/base.mako"/> +<%namespace file="/message.mako" import="render_msg" /> +<%namespace file="/admin/tool_shed_repository/repository_actions_menu.mako" import="*" /> +<%namespace file="/webapps/tool_shed/common/common.mako" import="common_misc_javascripts" /> + +<%def name="stylesheets()"> + ${parent.stylesheets()} + ${h.css( "library" )} +</%def> + +<%def name="javascripts()"> + ${parent.javascripts()} + ${common_misc_javascripts()} +</%def> + +${render_galaxy_repository_actions( repository )} + +%if message: + ${render_msg( message, status )} +%endif + +<div class="toolForm"> + <div class="toolFormTitle">Tool shed repository '${repository.name}' tool dependencies</div> + <% + can_install = False + can_uninstall = False + %> + <br/><br/> + <table class="grid"> + <tr><th bgcolor="#D8D8D8">Name</th><th bgcolor="#D8D8D8">Version</th><th bgcolor="#D8D8D8">Type</th><th bgcolor="#D8D8D8">Status</th><th bgcolor="#D8D8D8">Error</th></tr> + %for tool_dependency in repository.tool_dependencies: + <% + if tool_dependency.error_message: + error_message = tool_dependency.error_message + else: + error_message = '' + if not can_install: + if tool_dependency.status not in [ trans.model.ToolDependency.installation_status.INSTALLED ]: + can_install = True + if not can_uninstall: + if tool_dependency.status not in [ trans.model.ToolDependency.installation_status.UNINSTALLED ]: + can_uninstall = True + %> + <tr> + <td> + %if tool_dependency.status not in [ trans.model.ToolDependency.installation_status.UNINSTALLED ]: + <a target="galaxy_main" href="${h.url_for( controller='admin_toolshed', action='manage_repository_tool_dependencies', operation='browse', id=trans.security.encode_id( tool_dependency.id ) )}"> + ${tool_dependency.name} + </a> + %else: + ${tool_dependency.name} + %endif + </td> + <td>${tool_dependency.version}</td> + <td>${tool_dependency.type}</td> + <td>${tool_dependency.status}</td> + <td>${error_message}</td> + </tr> + %endfor + </table> + %if can_install: + <br/> + <form name="install_tool_dependencies" id="install_tool_dependencies" action="${h.url_for( controller='admin_toolshed', action='manage_tool_dependencies', operation='install' )}" method="post" > + <div class="form-row"> + Check each tool dependency that you want to install and click <b>Install</b>. + </div> + <div style="clear: both"></div> + <div class="form-row"> + <input type="checkbox" id="checkAll" name="select_all_uninstalled_tool_dependencies_checkbox" value="true" onclick="checkAllFields('tool_dependency_ids');"/><input type="hidden" name="select_all_uninstalled_tool_dependencies_checkbox" value="true"/><b>Select/unselect all tool dependencies</b> + </div> + <div style="clear: both"></div> + <div class="form-row"> + ${uninstalled_tool_dependencies_select_field.get_html()} + </div> + <div style="clear: both"></div> + <div class="form-row"> + <input type="submit" name="install_button" value="Install"/></td> + </div> + </form> + <br/> + %endif + %if can_uninstall: + <br/> + <form name="uninstall_tool_dependencies" id="uninstall_tool_dependencies" action="${h.url_for( controller='admin_toolshed', action='manage_repository_tool_dependencies', operation='uninstall' )}" method="post" > + <div class="form-row"> + Check each tool dependency that you want to uninstall and click <b>Uninstall</b>. + </div> + <div style="clear: both"></div> + <div class="form-row"> + <input type="checkbox" id="checkAll" name="select_all_installed_tool_dependencies_checkbox" value="true" onclick="checkAllFields('tool_dependency_ids');"/><input type="hidden" name="select_all_installed_tool_dependencies_checkbox" value="true"/><b>Select/unselect all tool dependencies</b> + </div> + <div style="clear: both"></div> + <div class="form-row"> + ${installed_tool_dependencies_select_field.get_html()} + </div> + <div style="clear: both"></div> + <div class="form-row"> + <input type="submit" name="uninstall_button" value="Uninstall"/></td> + </div> + </form> + <br/> + %endif + </div> +</div> diff -r d4d1d086e50d70eecb13fa0b61f738f09f8eefdd -r d842d50a6ed3241b3b888c2b6324fc59e9fa3134 templates/admin/tool_shed_repository/repository_actions_menu.mako --- a/templates/admin/tool_shed_repository/repository_actions_menu.mako +++ b/templates/admin/tool_shed_repository/repository_actions_menu.mako @@ -31,10 +31,10 @@ <a class="action-button" target="galaxy_main" href="${h.url_for( controller='admin_toolshed', action='set_tool_versions', id=trans.security.encode_id( repository.id ) )}">Set tool versions</a> %endif %if tool_dependency_ids: - <a class="action-button" target="galaxy_main" href="${h.url_for( controller='admin_toolshed', action='manage_tool_dependencies', tool_dependency_ids=tool_dependency_ids )}">Manage tool dependencies</a> + <a class="action-button" target="galaxy_main" href="${h.url_for( controller='admin_toolshed', action='manage_repository_tool_dependencies', tool_dependency_ids=tool_dependency_ids )}">Manage tool dependencies</a> %endif <a class="action-button" target="galaxy_main" href="${h.url_for( controller='admin_toolshed', action='deactivate_or_uninstall_repository', id=trans.security.encode_id( repository.id ) )}">Deactivate or uninstall repository</a> %endif </div></ul> -</%def> \ No newline at end of file +</%def> diff -r d4d1d086e50d70eecb13fa0b61f738f09f8eefdd -r d842d50a6ed3241b3b888c2b6324fc59e9fa3134 templates/webapps/tool_shed/repository/common.mako --- a/templates/webapps/tool_shed/repository/common.mako +++ b/templates/webapps/tool_shed/repository/common.mako @@ -867,7 +867,7 @@ ${tool_dependency.name | h} </a> %elif tool_dependency.installation_status != 'Installed': - <a class="action-button" href="${h.url_for( controller='admin_toolshed', action='manage_tool_dependencies', id=trans.security.encode_id( tool_dependency.tool_dependency_id ) )}"> + <a class="action-button" href="${h.url_for( controller='admin_toolshed', action='manage_repository_tool_dependencies', id=trans.security.encode_id( tool_dependency.tool_dependency_id ) )}"> ${tool_dependency.name} </a> %else: 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.