galaxy-commits
  Threads by month 
                
            - ----- 2025 -----
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2024 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2023 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2022 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2021 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2020 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2019 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2018 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2017 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2016 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2015 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2014 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2013 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2012 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2011 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2010 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 
February 2015
- 2 participants
 - 305 discussions
 
                        
                            
                                
                            
                            [galaxyproject/usegalaxy-playbook] f9e170: Add GXYcast1 slied to highlight new tools & Featur...
                        
                        
by GitHub 28 Feb '15
                    by GitHub 28 Feb '15
28 Feb '15
                    
                          Branch: refs/heads/master
  Home:   https://github.com/galaxyproject/usegalaxy-playbook
  Commit: f9e1704b38cbffacbfc02924436b9c717f7f8043
      https://github.com/galaxyproject/usegalaxy-playbook/commit/f9e1704b38cbffac…
  Author: Dave Clements <clements(a)Clements-Galaxy.local>
  Date:   2015-02-28 (Sat, 28 Feb 2015)
  Changed paths:
    A files/galaxy/common/static/welcome_img/GalaxyCast1.png
    M templates/galaxy/common/static/welcome.html.j2
  Log Message:
  -----------
  Add GXYcast1 slied to highlight new tools & Features.
Dropped Screencasts are back slide.
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                          Branch: refs/heads/master
  Home:   https://github.com/galaxyproject/usegalaxy-playbook
  Commit: b4dc38f009a2632db39382b9954ed14ec39ff34c
      https://github.com/galaxyproject/usegalaxy-playbook/commit/b4dc38f009a2632d…
  Author: Nate Coraor <nate(a)bx.psu.edu>
  Date:   2015-02-27 (Fri, 27 Feb 2015)
  Changed paths:
    M production/group_vars/all.yml
    M stage/group_vars/all.yml
  Log Message:
  -----------
  Update Test and Main
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                        3 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/edae5af34677/
Changeset:   edae5af34677
Branch:      release_15.03
User:        dannon
Date:        2015-02-27 00:59:26+00:00
Summary:     Fix server_starttime being in app for reports, toolshed.  I will be refactoring this shortly to have a base UniverseApplication from which things inherit.
Affected #:  2 files
diff -r 12a2f45243502295e324bf6656481a98c61101c0 -r edae5af346776161c139666c33f15066f769cdb5 lib/galaxy/webapps/reports/app.py
--- a/lib/galaxy/webapps/reports/app.py
+++ b/lib/galaxy/webapps/reports/app.py
@@ -1,5 +1,7 @@
+import config
 import sys
-import config
+import time
+
 import galaxy.model
 from galaxy.web import security
 
@@ -26,6 +28,8 @@
         self.targets_mysql = 'mysql' in self.config.database_connection
         # Security helper
         self.security = security.SecurityHelper( id_secret=self.config.id_secret )
+        # used for cachebusting -- refactor this into a *SINGLE* UniverseApplication base.
+        self.server_starttime = int(time.time())
 
     def shutdown( self ):
         pass
diff -r 12a2f45243502295e324bf6656481a98c61101c0 -r edae5af346776161c139666c33f15066f769cdb5 lib/galaxy/webapps/tool_shed/app.py
--- a/lib/galaxy/webapps/tool_shed/app.py
+++ b/lib/galaxy/webapps/tool_shed/app.py
@@ -1,17 +1,18 @@
 import config
 import sys
+import time
+import galaxy.datatypes.registry
+import galaxy.quota
+import galaxy.tools.data
+import galaxy.webapps.tool_shed.model
 from galaxy import tools
-import galaxy.tools.data
-import galaxy.quota
-import galaxy.datatypes.registry
-import galaxy.webapps.tool_shed.model
+from galaxy.managers.tags import CommunityTagManager
 from galaxy.openid.providers import OpenIDProviders
 from galaxy.util.dbkeys import GenomeBuilds
 from galaxy.web import security
-from galaxy.managers.tags import CommunityTagManager
-from tool_shed.grids.repository_grid_filter_manager import RepositoryGridFilterManager
 import tool_shed.repository_registry
 import tool_shed.repository_types.registry
+from tool_shed.grids.repository_grid_filter_manager import RepositoryGridFilterManager
 
 
 class UniverseApplication( object ):
@@ -70,6 +71,8 @@
         self.hgweb_config_manager.hgweb_config_dir = self.config.hgweb_config_dir
         # Initialize the repository registry.
         self.repository_registry = tool_shed.repository_registry.Registry( self )
+        #  used for cachebusting -- refactor this into a *SINGLE* UniverseApplication base.
+        self.server_starttime = int(time.time())
         print >> sys.stderr, "Tool shed hgweb.config file is: ", self.hgweb_config_manager.hgweb_config
 
     def shutdown( self ):
https://bitbucket.org/galaxy/galaxy-central/commits/be0aa5c296c7/
Changeset:   be0aa5c296c7
Branch:      release_15.03
User:        dan
Date:        2015-02-27 20:50:13+00:00
Summary:     Allow External display applications to use Tool Data Tables.
Affected #:  7 files
diff -r edae5af346776161c139666c33f15066f769cdb5 -r be0aa5c296c72e85dfea2effe7d228953ffcb8a1 lib/galaxy/app.py
--- a/lib/galaxy/app.py
+++ b/lib/galaxy/app.py
@@ -88,7 +88,7 @@
         # Load proprietary datatype converters and display applications.
         self.installed_repository_manager.load_proprietary_converters_and_display_applications()
         # Load datatype display applications defined in local datatypes_conf.xml
-        self.datatypes_registry.load_display_applications()
+        self.datatypes_registry.load_display_applications( self )
         # Load datatype converters defined in local datatypes_conf.xml
         self.datatypes_registry.load_datatype_converters( self.toolbox )
         # Load external metadata tool
diff -r edae5af346776161c139666c33f15066f769cdb5 -r be0aa5c296c72e85dfea2effe7d228953ffcb8a1 lib/galaxy/datatypes/display_applications/application.py
--- a/lib/galaxy/datatypes/display_applications/application.py
+++ b/lib/galaxy/datatypes/display_applications/application.py
@@ -80,21 +80,57 @@
         return True
 
 class DynamicDisplayApplicationBuilder( object ):
-    @classmethod
+
     def __init__( self, elem, display_application, build_sites ):
-        rval = []
         filename = None
+        data_table = None
         if elem.get( 'site_type', None ) is not None:
             filename = build_sites.get( elem.get( 'site_type' ) )
         else:
             filename = elem.get( 'from_file', None )
-        assert filename is not None, 'Filename and id attributes required for dynamic_links'
+        if filename is None:
+            data_table_name = elem.get( 'from_data_table', None )
+            if data_table_name:
+                data_table = display_application.app.tool_data_tables.get( data_table_name, None )
+                assert data_table is not None, 'Unable to find data table named "%s".' % data_table_name
+        
+        assert filename is not None or data_table is not None,'Filename or data Table is required for dynamic_links.'
         skip_startswith = elem.get( 'skip_startswith', None )
         separator = elem.get( 'separator', '\t' )
-        id_col = int( elem.get( 'id', None ) )
-        name_col = int( elem.get( 'name', id_col ) )
+        id_col = elem.get( 'id', None )
+        try:
+            id_col = int( id_col )
+        except:
+            if data_table:
+                if id_col is None:
+                    id_col = data_table.columns.get( 'id', None )
+                if id_col is None:
+                    id_col = data_table.columns.get( 'value', None )
+                try:
+                    id_col = int( id_col )
+                except:
+                    # id is set to a string or None, use column by that name if available
+                    id_col = data_table.columns.get( id_col, None )
+                    id_col = int( id_col )
+        name_col = elem.get( 'name', None )
+        try:
+            name_col = int( name_col )
+        except:
+            if data_table:
+                if name_col is None:
+                    name_col = data_table.columns.get( 'name', None )
+                else:
+                    name_col = data_table.columns.get( name_col, None )
+            else:
+                name_col = None
+        if name_col is None:
+            name_col = id_col
+        max_col = max( id_col, name_col )
         dynamic_params = {}
-        max_col = max( id_col, name_col )
+        if data_table is not None:
+            max_col = max(  [ max_col ] + data_table.columns.values() )
+            for key, value in data_table.columns.items():
+                dynamic_params[key] = { 'column': value, 'split': False, 'separator': ',' }
         for dynamic_param in elem.findall( 'dynamic_param' ):
             name = dynamic_param.get( 'name' )
             value = int( dynamic_param.get( 'value' ) )
@@ -102,27 +138,38 @@
             param_separator =  dynamic_param.get( 'separator', ',' )
             max_col = max( max_col, value )
             dynamic_params[name] = { 'column': value, 'split': split, 'separator': param_separator }
-        for line in open( filename ):
-            if not skip_startswith or not line.startswith( skip_startswith ):
-                line = line.rstrip( '\n\r' )
-                if not line:
+        if filename:
+            data_iter = open( filename )
+        elif data_table:
+            version, data_iter = data_table.get_version_fields()
+            display_application.add_data_table_watch( data_table.name, version )
+        links = []
+        for line in data_iter:
+            if isinstance( line, basestring ):
+                if not skip_startswith or not line.startswith( skip_startswith ):
+                    line = line.rstrip( '\n\r' )
+                    if not line:
+                        continue
+                    fields = line.split( separator )
+                else:
                     continue
-                fields = line.split( separator )
-                if len( fields ) > max_col:
-                    new_elem = deepcopy( elem )
-                    new_elem.set( 'id', fields[id_col] )
-                    new_elem.set( 'name', fields[name_col] )
-                    dynamic_values = {}
-                    for key, attributes in dynamic_params.iteritems():
-                        value = fields[ attributes[ 'column' ] ]
-                        if attributes['split']:
-                            value = value.split( attributes['separator'] )
-                        dynamic_values[key] = value
-                    #now populate
-                    rval.append( DisplayApplicationLink.from_elem( new_elem, display_application, other_values = dynamic_values ) )
-                else:
-                    log.warning( 'Invalid dynamic display application link specified in %s: "%s"' % ( filename, line ) )
-        self.links = rval
+            else:
+                fields = line
+            if len( fields ) > max_col:
+                new_elem = deepcopy( elem )
+                new_elem.set( 'id', fields[id_col] )
+                new_elem.set( 'name', fields[name_col] )
+                dynamic_values = {}
+                for key, attributes in dynamic_params.iteritems():
+                    value = fields[ attributes[ 'column' ] ]
+                    if attributes['split']:
+                        value = value.split( attributes['separator'] )
+                    dynamic_values[key] = value
+                #now populate
+                links.append( DisplayApplicationLink.from_elem( new_elem, display_application, other_values = dynamic_values ) )
+            else:
+                log.warning( 'Invalid dynamic display application link specified in %s: "%s"' % ( filename, line ) )
+        self.links = links
     def __iter__( self ):
         return iter( self.links )
 
@@ -166,12 +213,12 @@
 
 class DisplayApplication( object ):
     @classmethod
-    def from_file( cls, filename, datatypes_registry ):
-        return cls.from_elem( parse_xml( filename ).getroot(), datatypes_registry, filename=filename )
+    def from_file( cls, filename, app ):
+        return cls.from_elem( parse_xml( filename ).getroot(), app, filename=filename )
     @classmethod
-    def from_elem( cls, elem, datatypes_registry, filename=None ):
+    def from_elem( cls, elem, app, filename=None ):
         att_dict = cls._get_attributes_from_elem( elem )
-        rval = DisplayApplication( att_dict['id'], att_dict['name'], datatypes_registry, att_dict['version'], filename=filename, elem=elem )
+        rval = DisplayApplication( att_dict['id'], att_dict['name'], app, att_dict['version'], filename=filename, elem=elem )
         rval._load_links_from_elem( elem )
         return rval
     @classmethod
@@ -181,29 +228,32 @@
         name = elem.get( 'name', display_id )
         version = elem.get( 'version', None )
         return dict( id=display_id, name=name, version=version )
-    def __init__( self, display_id, name, datatypes_registry, version = None, filename=None, elem=None ):
+    def __init__( self, display_id, name, app, version = None, filename=None, elem=None ):
         self.id = display_id
         self.name = name
-        self.datatypes_registry = datatypes_registry
+        self.app = app
         if version is None:
             version = "1.0.0"
         self.version = version
         self.links = odict()
         self._filename = filename
         self._elem = elem
+        self._data_table_versions = {}
     def _load_links_from_elem( self, elem ):
         for link_elem in elem.findall( 'link' ):
             link = DisplayApplicationLink.from_elem( link_elem, self )
             if link:
                 self.links[ link.id ] = link
         for dynamic_links in elem.findall( 'dynamic_links' ):
-            for link in DynamicDisplayApplicationBuilder( dynamic_links, self, self.datatypes_registry.build_sites ):
+            for link in DynamicDisplayApplicationBuilder( dynamic_links, self, self.app.datatypes_registry.build_sites ):
                 self.links[ link.id ] = link
     def get_link( self, link_name, data, dataset_hash, user_hash, trans, app_kwds ):
         #returns a link object with data knowledge to generate links
+        self._check_and_reload()
         return PopulatedDisplayApplicationLink( self.links[ link_name ], data, dataset_hash, user_hash, trans, app_kwds )
     def filter_by_dataset( self, data, trans ):
-        filtered = DisplayApplication( self.id, self.name, self.datatypes_registry, version = self.version )
+        self._check_and_reload()
+        filtered = DisplayApplication( self.id, self.name, self.app, version = self.version )
         for link_name, link_value in self.links.iteritems():
             if link_value.filter_by_dataset( data, trans ):
                 filtered.links[link_name] = link_value
@@ -222,9 +272,24 @@
         # clear old links
         for key in self.links.keys():
             del self.links[key]
+        #clear data table versions:
+        for key in self._data_table_versions.keys():
+            del self._data_table_versions[ key ]
         # Set new attributes
         for key, value in attr_dict.iteritems():
             setattr( self, key, value )
         # Load new links
         self._load_links_from_elem( elem )
         return self
+    def add_data_table_watch( self, table_name, version=None ):
+        self._data_table_versions[ table_name ] = version
+    def _requires_reload( self ):
+        for key, value in self._data_table_versions.iteritems():
+            table = self.app.tool_data_tables.get( key, None )
+            if table and not table.is_current_version( value ):
+                return True
+        return False
+    def _check_and_reload( self ):
+        if self._requires_reload():
+            self.reload()
+
diff -r edae5af346776161c139666c33f15066f769cdb5 -r be0aa5c296c72e85dfea2effe7d228953ffcb8a1 lib/galaxy/datatypes/display_applications/parameters.py
--- a/lib/galaxy/datatypes/display_applications/parameters.py
+++ b/lib/galaxy/datatypes/display_applications/parameters.py
@@ -59,7 +59,7 @@
     @property
     def formats( self ):
         if self.extensions:
-            return tuple( map( type, map( self.link.display_application.datatypes_registry.get_datatype_by_extension, self.extensions ) ) )
+            return tuple( map( type, map( self.link.display_application.app.datatypes_registry.get_datatype_by_extension, self.extensions ) ) )
         return None
     def _get_dataset_like_object( self, other_values ):
         #this returned object has file_name, state, and states attributes equivalent to a DatasetAssociation
diff -r edae5af346776161c139666c33f15066f769cdb5 -r be0aa5c296c72e85dfea2effe7d228953ffcb8a1 lib/galaxy/datatypes/registry.py
--- a/lib/galaxy/datatypes/registry.py
+++ b/lib/galaxy/datatypes/registry.py
@@ -546,7 +546,7 @@
                 else:
                     self.log.exception( "Error loading converter (%s): %s" % ( converter_path, str( e ) ) )
 
-    def load_display_applications( self, installed_repository_dict=None, deactivate=False ):
+    def load_display_applications( self, app, installed_repository_dict=None, deactivate=False ):
         """
         If deactivate is False, add display applications from self.display_app_containers or
         self.proprietary_display_app_containers to appropriate datatypes.  If deactivate is
@@ -570,7 +570,7 @@
                     config_path = os.path.join( self.display_applications_path, display_file )
                 try:
                     inherit = galaxy.util.string_as_bool( display_app.get( 'inherit', 'False' ) )
-                    display_app = DisplayApplication.from_file( config_path, self )
+                    display_app = DisplayApplication.from_file( config_path, app )
                     if display_app:
                         if display_app.id in self.display_applications:
                             if deactivate:
diff -r edae5af346776161c139666c33f15066f769cdb5 -r be0aa5c296c72e85dfea2effe7d228953ffcb8a1 lib/tool_shed/galaxy_install/datatypes/custom_datatype_manager.py
--- a/lib/tool_shed/galaxy_install/datatypes/custom_datatype_manager.py
+++ b/lib/tool_shed/galaxy_install/datatypes/custom_datatype_manager.py
@@ -214,5 +214,5 @@
 
     def load_installed_display_applications( self, installed_repository_dict, deactivate=False ):
         """Load or deactivate custom datatype display applications."""
-        self.app.datatypes_registry.load_display_applications( installed_repository_dict=installed_repository_dict,
+        self.app.datatypes_registry.load_display_applications( self.app, installed_repository_dict=installed_repository_dict,
                                                                deactivate=deactivate )
diff -r edae5af346776161c139666c33f15066f769cdb5 -r be0aa5c296c72e85dfea2effe7d228953ffcb8a1 lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -621,7 +621,7 @@
                 self.app.datatypes_registry.load_datatype_converters( self.app.toolbox, installed_repository_dict=repository_dict )
             if display_path:
                 # Load proprietary datatype display applications
-                self.app.datatypes_registry.load_display_applications( installed_repository_dict=repository_dict )
+                self.app.datatypes_registry.load_display_applications( self.app, installed_repository_dict=repository_dict )
 
     def handle_tool_shed_repositories( self, installation_dict, using_api=False ):
         # The following installation_dict entries are all required.
diff -r edae5af346776161c139666c33f15066f769cdb5 -r be0aa5c296c72e85dfea2effe7d228953ffcb8a1 lib/tool_shed/galaxy_install/tool_migration_manager.py
--- a/lib/tool_shed/galaxy_install/tool_migration_manager.py
+++ b/lib/tool_shed/galaxy_install/tool_migration_manager.py
@@ -523,7 +523,7 @@
                                                                       installed_repository_dict=repository_dict )
             if display_path:
                 # Load proprietary datatype display applications
-                self.app.datatypes_registry.load_display_applications( installed_repository_dict=repository_dict )
+                self.app.datatypes_registry.load_display_applications( self.app, installed_repository_dict=repository_dict )
             basic_util.remove_dir( work_dir )
 
     def install_repository( self, repository_elem, tool_shed_repository, install_dependencies, is_repository_dependency=False ):
https://bitbucket.org/galaxy/galaxy-central/commits/fe4cfbd300a1/
Changeset:   fe4cfbd300a1
Branch:      release_15.03
User:        dan
Date:        2015-02-27 20:50:28+00:00
Summary:     Have IGV external display application load a set of links for available genomes via a tool data table that reads a URL (http://igv.broadinstitute.org/genomes/genomes.txt) The manually specified builds links should now be used to add additional builds, or for alias mapping (e.g. hg_g1k_v37-->b37).
Affected #:  4 files
diff -r be0aa5c296c72e85dfea2effe7d228953ffcb8a1 -r fe4cfbd300a11b8fc1f05fff06209035f0ef26e6 config/tool_data_table_conf.xml.sample
--- a/config/tool_data_table_conf.xml.sample
+++ b/config/tool_data_table_conf.xml.sample
@@ -65,4 +65,9 @@
         <columns>value, path</columns><file path="tool-data/twobit.loc" /></table>
+    <!-- Available IGV builds, loaded from URL -->
+    <table name="igv_broad_genomes" comment_char="#">
+        <columns>name, url, value</columns>
+        <file url="http://igv.broadinstitute.org/genomes/genomes.txt" />
+    </table></tables>
diff -r be0aa5c296c72e85dfea2effe7d228953ffcb8a1 -r fe4cfbd300a11b8fc1f05fff06209035f0ef26e6 display_applications/igv/bam.xml
--- a/display_applications/igv/bam.xml
+++ b/display_applications/igv/bam.xml
@@ -93,7 +93,20 @@
             #end if
         </param></dynamic_links>
-    
+
+
+    <dynamic_links from_data_table="igv_broad_genomes" skip_startswith="#" id="value" name="name">
+
+        <!-- Our input data table is one line per dbkey -->
+        <filter>${ $dataset.dbkey == $value }</filter>
+
+        <!-- We define url and params as normal, but values defined in dynamic_param are available by specified name -->
+        <url>http://www.broadinstitute.org/igv/projects/current/igv.php?sessionURL=${bam… $bam_file.name )}</url>
+
+        <param type="data" name="bam_file" url="galaxy_${DATASET_HASH}.bam" />
+        <param type="data" name="bai_file" url="galaxy_${DATASET_HASH}.bam.bai" metadata="bam_index" />
+
+    </dynamic_links></display><!-- Dan Blankenberg -->
diff -r be0aa5c296c72e85dfea2effe7d228953ffcb8a1 -r fe4cfbd300a11b8fc1f05fff06209035f0ef26e6 display_applications/igv/vcf.xml
--- a/display_applications/igv/vcf.xml
+++ b/display_applications/igv/vcf.xml
@@ -93,7 +93,20 @@
             #end if
         </param></dynamic_links>
-    
+
+
+    <dynamic_links from_data_table="igv_broad_genomes" skip_startswith="#" id="value" name="name">
+
+        <!-- Our input data table is one line per dbkey -->
+        <filter>${ $dataset.dbkey == $value }</filter>
+
+        <!-- We define url and params as normal, but values defined in dynamic_param are available by specified name -->
+        <url>http://www.broadinstitute.org/igv/projects/current/igv.php?sessionURL=${bgz… $bgzip_file.name )}</url>
+
+        <param type="data" name="bgzip_file" url="galaxy_${DATASET_HASH}.vcf.gz" format="vcf_bgzip" />
+        <param type="data" name="tabix_file" dataset="bgzip_file" url="galaxy_${DATASET_HASH}.vcf.gz.tbi" format="tabix" />
+
+    </dynamic_links></display><!-- Dan Blankenberg -->
diff -r be0aa5c296c72e85dfea2effe7d228953ffcb8a1 -r fe4cfbd300a11b8fc1f05fff06209035f0ef26e6 tool-data/shared/igv/igv_build_sites.txt.sample
--- a/tool-data/shared/igv/igv_build_sites.txt.sample
+++ b/tool-data/shared/igv/igv_build_sites.txt.sample
@@ -1,4 +1,4 @@
 #site_id	site_name	site_url	dbkey	ivg_build_name
-web_link_main	web current	http://www.broadinstitute.org/igv/projects/current/igv.php	hg19,hg_g1k_v37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum	hg19,b37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum
+web_link_main	web current	http://www.broadinstitute.org/igv/projects/current/igv.php	hg_g1k_v37	b37
 #web_jnlp_1.5	web 1.5	http://www.broadinstitute.org/igvdata/jws/prod	hg19,hg_g1k_v37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum	hg19,b37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum
-#local_default	local	http://localhost:60151/load	hg19,hg_g1k_v37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum	hg19,b37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum
\ No newline at end of file
+#local_default	local	http://localhost:60151/load	hg19,hg_g1k_v37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum	hg19,b37,hg18,1kg_ref,hg17,hg16,mm9,mm8,mm7,panTro2,rheMac2,rn4,canFam2,bosTau6,bosTau4,bosTau3,susScrofa,galGal3,cavPor3,monDom5,xenTro2,taeGut1,zebrafish,danRer6,danRer7,gasAcu1,Aplysia,Plasmodium_3D7_v2.1,Plasmodium_3D7_v5.5,Plasmodium_6.1,PlasmoDB_7.0,pvivax,GSM552910,sacCer1,sacCer2,sk1,Y55,sacCer62,spombe_709,spombe_1.55,candida,mg8,spur_2.1,spur_2.5,spur_3.0,WS201,ce6,ce4,dm3,dm2,dmel_5.9,dmel_r5.22,dmel_r5.33,tcas_2.0,tcas_3.0,ncrassa_v3,nc10,Glamblia_2.0,me49,tb927,tbgambi,lmjr,anidulans_4.1,NC_009012,U00096.2,NC_000913.2,NC_002655.2,CSavignyi_v2.1,tair8,tair9,tair10,O_Sativa_r6,osativa_6.1,B73,ZmB73_5a,ppatens_1.2,D.discoideum
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
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                        12 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/a3be81bd096a/
Changeset:   a3be81bd096a
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     Reduce use of bare excepts in install_manager.py.
Affected #:  1 file
diff -r 179c7c3fbb0db10765a97eb632bfc34c570ef0ff -r a3be81bd096a90d8a2528921d84e66d0c97479fb lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -710,19 +710,19 @@
         installed_tool_shed_repositories = []
         try:
             has_repository_dependencies = repository_revision_dict[ 'has_repository_dependencies' ]
-        except:
+        except KeyError:
             raise exceptions.InternalServerError( "Tool shed response missing required parameter 'has_repository_dependencies'." )
         try:
             includes_tools = repository_revision_dict[ 'includes_tools' ]
-        except:
+        except KeyError:
             raise exceptions.InternalServerError( "Tool shed response missing required parameter 'includes_tools'." )
         try:
             includes_tool_dependencies = repository_revision_dict[ 'includes_tool_dependencies' ]
-        except:
+        except KeyError:
             raise exceptions.InternalServerError( "Tool shed response missing required parameter 'includes_tool_dependencies'." )
         try:
             includes_tools_for_display_in_tool_panel = repository_revision_dict[ 'includes_tools_for_display_in_tool_panel' ]
-        except:
+        except KeyError:
             raise exceptions.InternalServerError( "Tool shed response missing required parameter 'includes_tools_for_display_in_tool_panel'." )
         # Get the information about the Galaxy components (e.g., tool pane section, tool config file, etc) that will contain the repository information.
         install_repository_dependencies = install_options.get( 'install_repository_dependencies', False )
https://bitbucket.org/galaxy/galaxy-central/commits/f1ea6093d943/
Changeset:   f1ea6093d943
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     Eliminate unused using_api parameter in install_manager.
Affected #:  2 files
diff -r a3be81bd096a90d8a2528921d84e66d0c97479fb -r f1ea6093d9435b2c6015c50f8a1defecbc26f8ef 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
@@ -1092,7 +1092,7 @@
                                       tool_path=tool_path,
                                       tool_shed_url=tool_shed_url )
             created_or_updated_tool_shed_repositories, tool_panel_section_keys, repo_info_dicts, filtered_repo_info_dicts = \
-                install_repository_manager.handle_tool_shed_repositories( installation_dict, using_api=False )
+                install_repository_manager.handle_tool_shed_repositories( installation_dict )
             if created_or_updated_tool_shed_repositories:
                 installation_dict = dict( created_or_updated_tool_shed_repositories=created_or_updated_tool_shed_repositories,
                                           filtered_repo_info_dicts=filtered_repo_info_dicts,
diff -r a3be81bd096a90d8a2528921d84e66d0c97479fb -r f1ea6093d9435b2c6015c50f8a1defecbc26f8ef lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -623,7 +623,7 @@
                 # Load proprietary datatype display applications
                 self.app.datatypes_registry.load_display_applications( installed_repository_dict=repository_dict )
 
-    def handle_tool_shed_repositories( self, installation_dict, using_api=False ):
+    def handle_tool_shed_repositories( self, installation_dict ):
         # The following installation_dict entries are all required.
         install_repository_dependencies = installation_dict[ 'install_repository_dependencies' ]
         new_tool_panel_section_label = installation_dict[ 'new_tool_panel_section_label' ]
@@ -759,7 +759,7 @@
                                   tool_shed_url=tool_shed_url )
         # Create the tool_shed_repository database records and gather additional information for repository installation.
         created_or_updated_tool_shed_repositories, tool_panel_section_keys, repo_info_dicts, filtered_repo_info_dicts = \
-            self.handle_tool_shed_repositories( installation_dict, using_api=True )
+            self.handle_tool_shed_repositories( installation_dict )
         if created_or_updated_tool_shed_repositories:
             # Build the dictionary of information necessary for installing the repositories.
             installation_dict = dict( created_or_updated_tool_shed_repositories=created_or_updated_tool_shed_repositories,
https://bitbucket.org/galaxy/galaxy-central/commits/f95ba7774644/
Changeset:   f95ba7774644
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     Small refactoring of install_manager.py.
Break tool dependency dir checking out into its own function to reduce complexity of __install_repositories.
Affected #:  1 file
diff -r f1ea6093d9435b2c6015c50f8a1defecbc26f8ef -r f95ba77746449eeff2593a06a457b57ebe803eca lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -728,11 +728,7 @@
         install_repository_dependencies = install_options.get( 'install_repository_dependencies', False )
         install_tool_dependencies = install_options.get( 'install_tool_dependencies', False )
         if install_tool_dependencies:
-            if self.app.config.tool_dependency_dir is None:
-                no_tool_dependency_dir_message = "Tool dependencies can be automatically installed only if you set "
-                no_tool_dependency_dir_message += "the value of your 'tool_dependency_dir' setting in your Galaxy "
-                no_tool_dependency_dir_message += "configuration file (galaxy.ini) and restart your Galaxy server.  "
-                raise exceptions.ConfigDoesNotAllowException( no_tool_dependency_dir_message )
+            self.__assert_can_install_dependencies()
         new_tool_panel_section_label = install_options.get( 'new_tool_panel_section_label', '' )
         shed_tool_conf = install_options.get( 'shed_tool_conf', None )
         if shed_tool_conf:
@@ -957,6 +953,13 @@
         self.install_model.context.add( tool_shed_repository )
         self.install_model.context.flush()
 
+    def __assert_can_install_dependencies(self):
+        if self.app.config.tool_dependency_dir is None:
+            no_tool_dependency_dir_message = "Tool dependencies can be automatically installed only if you set "
+            no_tool_dependency_dir_message += "the value of your 'tool_dependency_dir' setting in your Galaxy "
+            no_tool_dependency_dir_message += "configuration file (galaxy.ini) and restart your Galaxy server.  "
+            raise exceptions.ConfigDoesNotAllowException( no_tool_dependency_dir_message )
+
 
 def fetch_tool_versions( app, tool_shed_repository ):
     """ Fetch a data structure describing tool shed versions from the tool shed
https://bitbucket.org/galaxy/galaxy-central/commits/0688265255e4/
Changeset:   0688265255e4
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     Make more clear function in admin_toolshed is not entry point.
Affected #:  1 file
diff -r f95ba77746449eeff2593a06a457b57ebe803eca -r 0688265255e47eea3e90ce0947cadc520ab1145f 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
@@ -639,32 +639,6 @@
 
     @web.expose
     @web.require_admin
-    def install_tool_shed_repositories( self, trans, tool_shed_repositories, reinstalling=False, **kwd  ):
-        """Install specified tool shed repositories."""
-        shed_tool_conf = kwd.get( 'shed_tool_conf', '' )
-        tool_path = kwd[ 'tool_path' ]
-        install_tool_dependencies = CheckboxField.is_checked( kwd.get( 'install_tool_dependencies', '' ) )
-        # There must be a one-to-one mapping between items in the 3 lists: tool_shed_repositories, tool_panel_section_keys, repo_info_dicts.
-        tool_panel_section_keys = util.listify( kwd[ 'tool_panel_section_keys' ] )
-        repo_info_dicts = util.listify( kwd[ 'repo_info_dicts' ] )
-        irm = install_manager.InstallRepositoryManager( trans.app )
-        for index, tool_shed_repository in enumerate( tool_shed_repositories ):
-            repo_info_dict = repo_info_dicts[ index ]
-            tool_panel_section_key = tool_panel_section_keys[ index ]
-            irm.install_tool_shed_repository( tool_shed_repository,
-                                              repo_info_dict,
-                                              tool_panel_section_key,
-                                              shed_tool_conf,
-                                              tool_path,
-                                              install_tool_dependencies,
-                                              reinstalling=reinstalling )
-        tsr_ids_for_monitoring = [ trans.security.encode_id( tsr.id ) for tsr in tool_shed_repositories ]
-        return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
-                                                          action='monitor_repository_installation',
-                                                          tool_shed_repository_ids=tsr_ids_for_monitoring ) )
-
-    @web.expose
-    @web.require_admin
     def manage_repositories( self, trans, **kwd ):
         message = escape( kwd.get( 'message', '' ) )
         status = kwd.get( 'status', 'done' )
@@ -733,10 +707,10 @@
                 if repositories_for_installation:
                     decoded_kwd[ 'repo_info_dicts' ] = filtered_repo_info_dicts
                     decoded_kwd[ 'tool_panel_section_keys' ] = filtered_tool_panel_section_keys
-                    self.install_tool_shed_repositories( trans,
-                                                         repositories_for_installation,
-                                                         reinstalling=reinstalling,
-                                                         **decoded_kwd )
+                    self.__install_tool_shed_repositories( trans,
+                                                           repositories_for_installation,
+                                                           reinstalling=reinstalling,
+                                                           **decoded_kwd )
                 else:
                     kwd[ 'message' ] = 'All selected tool shed repositories are already installed.'
                     kwd[ 'status' ] = 'error'
@@ -2162,3 +2136,27 @@
                                     metadata=metadata,
                                     message=message,
                                     status=status )
+
+    def __install_tool_shed_repositories( self, trans, tool_shed_repositories, reinstalling=False, **kwd  ):
+        """Install specified tool shed repositories."""
+        shed_tool_conf = kwd.get( 'shed_tool_conf', '' )
+        tool_path = kwd[ 'tool_path' ]
+        install_tool_dependencies = CheckboxField.is_checked( kwd.get( 'install_tool_dependencies', '' ) )
+        # There must be a one-to-one mapping between items in the 3 lists: tool_shed_repositories, tool_panel_section_keys, repo_info_dicts.
+        tool_panel_section_keys = util.listify( kwd[ 'tool_panel_section_keys' ] )
+        repo_info_dicts = util.listify( kwd[ 'repo_info_dicts' ] )
+        irm = install_manager.InstallRepositoryManager( trans.app )
+        for index, tool_shed_repository in enumerate( tool_shed_repositories ):
+            repo_info_dict = repo_info_dicts[ index ]
+            tool_panel_section_key = tool_panel_section_keys[ index ]
+            irm.install_tool_shed_repository( tool_shed_repository,
+                                              repo_info_dict,
+                                              tool_panel_section_key,
+                                              shed_tool_conf,
+                                              tool_path,
+                                              install_tool_dependencies,
+                                              reinstalling=reinstalling )
+        tsr_ids_for_monitoring = [ trans.security.encode_id( tsr.id ) for tsr in tool_shed_repositories ]
+        return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
+                                                          action='monitor_repository_installation',
+                                                          tool_shed_repository_ids=tsr_ids_for_monitoring ) )
https://bitbucket.org/galaxy/galaxy-central/commits/2998ac978d89/
Changeset:   2998ac978d89
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     Extract an exception out in install_manager.py.
Will make it easier to catch this specific problem in admin_toolshed in subsequent refactoring.
Affected #:  1 file
diff -r 0688265255e47eea3e90ce0947cadc520ab1145f -r 2998ac978d8935c7d9ba655ada297e2f2d205ebd lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -804,7 +804,7 @@
                     installed_tool_shed_repositories.append( tool_shed_repository )
         else:
             # We're attempting to install more than 1 repository, and all of them have already been installed.
-            raise exceptions.RequestParameterInvalidException( 'All repositories that you are attempting to install have been previously installed.' )
+            raise RepositoriesInstalledException()
         return installed_tool_shed_repositories
 
     def install_tool_shed_repository( self, tool_shed_repository, repo_info_dict, tool_panel_section_key, shed_tool_conf, tool_path,
@@ -961,6 +961,12 @@
             raise exceptions.ConfigDoesNotAllowException( no_tool_dependency_dir_message )
 
 
+class RepositoriesInstalledException(exceptions.RequestParameterInvalidException):
+
+    def __init__(self):
+        super(RepositoriesInstalledException, self).__init__('All repositories that you are attempting to install have been previously installed.')
+
+
 def fetch_tool_versions( app, tool_shed_repository ):
     """ Fetch a data structure describing tool shed versions from the tool shed
     corresponding to a tool_shed_repository object.
https://bitbucket.org/galaxy/galaxy-central/commits/d7849c8a5de0/
Changeset:   d7849c8a5de0
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     Refactor a bunch of repository installation out of controller...
... and into install_manager.py. There is a bunch of duplication between this and the code already in install manager - which is a good indication this is where it belongs - hopefully we can de-duplicate it with subsequent changes. This will also allow more of install_manager's methods to be marked as internal.
Affected #:  2 files
diff -r 2998ac978d8935c7d9ba655ada297e2f2d205ebd -r d7849c8a5de0878a9da97ce4ab52a0272a904a13 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
@@ -678,41 +678,20 @@
                 reinstalling = util.string_as_bool( kwd.get( 'reinstalling', False ) )
                 encoded_kwd = kwd[ 'encoded_kwd' ]
                 decoded_kwd = encoding_util.tool_shed_decode( encoded_kwd )
-                tsr_ids = decoded_kwd[ 'tool_shed_repository_ids' ]
-                tool_panel_section_keys = decoded_kwd[ 'tool_panel_section_keys' ]
-                repo_info_dicts = decoded_kwd[ 'repo_info_dicts' ]
-                filtered_repo_info_dicts = []
-                filtered_tool_panel_section_keys = []
-                repositories_for_installation = []
-                # Some repositories may have repository dependencies that are required to be installed before the
-                # dependent repository, so we'll order the list of tsr_ids to ensure all repositories install in the
-                # required order.
-                ordered_tsr_ids, ordered_repo_info_dicts, ordered_tool_panel_section_keys = \
-                    irm.order_components_for_installation( tsr_ids,
-                                                           repo_info_dicts,
-                                                           tool_panel_section_keys=tool_panel_section_keys )
-                for tsr_id in ordered_tsr_ids:
-                    repository = trans.install_model.context.query( trans.install_model.ToolShedRepository ) \
-                                                            .get( trans.security.decode_id( tsr_id ) )
-                    if repository.status in [ trans.install_model.ToolShedRepository.installation_status.NEW,
-                                              trans.install_model.ToolShedRepository.installation_status.UNINSTALLED ]:
-                        repositories_for_installation.append( repository )
-                        repo_info_dict, tool_panel_section_key = \
-                            irm.get_repository_components_for_installation( tsr_id,
-                                                                            ordered_tsr_ids,
-                                                                            ordered_repo_info_dicts,
-                                                                            ordered_tool_panel_section_keys )
-                        filtered_repo_info_dicts.append( repo_info_dict )
-                        filtered_tool_panel_section_keys.append( tool_panel_section_key )
-                if repositories_for_installation:
-                    decoded_kwd[ 'repo_info_dicts' ] = filtered_repo_info_dicts
-                    decoded_kwd[ 'tool_panel_section_keys' ] = filtered_tool_panel_section_keys
-                    self.__install_tool_shed_repositories( trans,
-                                                           repositories_for_installation,
-                                                           reinstalling=reinstalling,
-                                                           **decoded_kwd )
-                else:
-                    kwd[ 'message' ] = 'All selected tool shed repositories are already installed.'
+                install_tool_dependencies = CheckboxField.is_checked( decoded_kwd.get( 'install_tool_dependencies', '' ) )
+                decoded_kwd['install_tool_dependencies'] = install_tool_dependencies
+                try:
+                    tool_shed_repositories = irm.install_web(
+                        trans=trans,
+                        decoded_kwd=decoded_kwd,
+                        reinstalling=reinstalling,
+                    )
+                    tsr_ids_for_monitoring = [ trans.security.encode_id( tsr.id ) for tsr in tool_shed_repositories ]
+                    trans.response.send_redirect( web.url_for( controller='admin_toolshed',
+                                                               action='monitor_repository_installation',
+                                                               tool_shed_repository_ids=tsr_ids_for_monitoring ) )
+                except install_manager.RepositoriesInstalledException as e:
+                    kwd[ 'message' ] = e.message
                     kwd[ 'status' ] = 'error'
         return self.repository_installation_grid( trans, **kwd )
 
@@ -2136,27 +2115,3 @@
                                     metadata=metadata,
                                     message=message,
                                     status=status )
-
-    def __install_tool_shed_repositories( self, trans, tool_shed_repositories, reinstalling=False, **kwd  ):
-        """Install specified tool shed repositories."""
-        shed_tool_conf = kwd.get( 'shed_tool_conf', '' )
-        tool_path = kwd[ 'tool_path' ]
-        install_tool_dependencies = CheckboxField.is_checked( kwd.get( 'install_tool_dependencies', '' ) )
-        # There must be a one-to-one mapping between items in the 3 lists: tool_shed_repositories, tool_panel_section_keys, repo_info_dicts.
-        tool_panel_section_keys = util.listify( kwd[ 'tool_panel_section_keys' ] )
-        repo_info_dicts = util.listify( kwd[ 'repo_info_dicts' ] )
-        irm = install_manager.InstallRepositoryManager( trans.app )
-        for index, tool_shed_repository in enumerate( tool_shed_repositories ):
-            repo_info_dict = repo_info_dicts[ index ]
-            tool_panel_section_key = tool_panel_section_keys[ index ]
-            irm.install_tool_shed_repository( tool_shed_repository,
-                                              repo_info_dict,
-                                              tool_panel_section_key,
-                                              shed_tool_conf,
-                                              tool_path,
-                                              install_tool_dependencies,
-                                              reinstalling=reinstalling )
-        tsr_ids_for_monitoring = [ trans.security.encode_id( tsr.id ) for tsr in tool_shed_repositories ]
-        return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
-                                                          action='monitor_repository_installation',
-                                                          tool_shed_repository_ids=tsr_ids_for_monitoring ) )
diff -r 2998ac978d8935c7d9ba655ada297e2f2d205ebd -r d7849c8a5de0878a9da97ce4ab52a0272a904a13 lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -7,6 +7,7 @@
 
 from galaxy import exceptions
 from galaxy import eggs
+from galaxy import util
 
 eggs.require( 'paramiko' )
 eggs.require( 'ssh' )
@@ -807,6 +808,54 @@
             raise RepositoriesInstalledException()
         return installed_tool_shed_repositories
 
+    def install_web( self, trans, decoded_kwd, reinstalling ):
+        shed_tool_conf = decoded_kwd.get( 'shed_tool_conf', '' )
+        tool_path = decoded_kwd[ 'tool_path' ]
+        tsr_ids = decoded_kwd[ 'tool_shed_repository_ids' ]
+        tool_panel_section_keys = util.listify( decoded_kwd[ 'tool_panel_section_keys' ] )
+        repo_info_dicts = util.listify( decoded_kwd[ 'repo_info_dicts' ] )
+        install_tool_dependencies = decoded_kwd['install_tool_dependencies']
+        filtered_repo_info_dicts = []
+        filtered_tool_panel_section_keys = []
+        repositories_for_installation = []
+        # Some repositories may have repository dependencies that are required to be installed before the
+        # dependent repository, so we'll order the list of tsr_ids to ensure all repositories install in the
+        # required order.
+        ordered_tsr_ids, ordered_repo_info_dicts, ordered_tool_panel_section_keys = \
+            self.order_components_for_installation( tsr_ids,
+                                                    repo_info_dicts,
+                                                    tool_panel_section_keys=tool_panel_section_keys )
+        for tsr_id in ordered_tsr_ids:
+            repository = trans.install_model.context.query( trans.install_model.ToolShedRepository ) \
+                                                    .get( trans.security.decode_id( tsr_id ) )
+            if repository.status in [ trans.install_model.ToolShedRepository.installation_status.NEW,
+                                      trans.install_model.ToolShedRepository.installation_status.UNINSTALLED ]:
+                repositories_for_installation.append( repository )
+                repo_info_dict, tool_panel_section_key = \
+                    self.get_repository_components_for_installation( tsr_id,
+                                                                     ordered_tsr_ids,
+                                                                     ordered_repo_info_dicts,
+                                                                     ordered_tool_panel_section_keys )
+                filtered_repo_info_dicts.append( repo_info_dict )
+                filtered_tool_panel_section_keys.append( tool_panel_section_key )
+
+        installed_tool_shed_repositories = []
+        if repositories_for_installation:
+            for index, tool_shed_repository in enumerate( repositories_for_installation ):
+                repo_info_dict = filtered_repo_info_dicts[ index ]
+                tool_panel_section_key = filtered_tool_panel_section_keys[ index ]
+                self.install_tool_shed_repository( tool_shed_repository,
+                                                   repo_info_dict=repo_info_dict,
+                                                   tool_panel_section_key=tool_panel_section_key,
+                                                   shed_tool_conf=shed_tool_conf,
+                                                   tool_path=tool_path,
+                                                   install_tool_dependencies=install_tool_dependencies,
+                                                   reinstalling=reinstalling )
+                installed_tool_shed_repositories.append( tool_shed_repository )
+        else:
+            raise RepositoriesInstalledException()
+        return installed_tool_shed_repositories
+
     def install_tool_shed_repository( self, tool_shed_repository, repo_info_dict, tool_panel_section_key, shed_tool_conf, tool_path,
                                       install_tool_dependencies, reinstalling=False ):
         if tool_panel_section_key:
https://bitbucket.org/galaxy/galaxy-central/commits/4a04ee11725e/
Changeset:   4a04ee11725e
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     PEP-8 comments in install_manager.py.
Affected #:  1 file
diff -r d7849c8a5de0878a9da97ce4ab52a0272a904a13 -r 4a04ee11725e11127848775ae46e68818843e768 lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -455,10 +455,12 @@
     def get_repository_components_for_installation( self, encoded_tsr_id, encoded_tsr_ids, repo_info_dicts,
                                                     tool_panel_section_keys ):
         """
-        The received encoded_tsr_ids, repo_info_dicts, and tool_panel_section_keys are 3 lists that
-        contain associated elements at each location in the list.  This method will return the elements
-        from repo_info_dicts and tool_panel_section_keys associated with the received encoded_tsr_id
-        by determining its location in the received encoded_tsr_ids list.
+        The received encoded_tsr_ids, repo_info_dicts, and
+        tool_panel_section_keys are 3 lists that contain associated elements
+        at each location in the list.  This method will return the elements
+        from repo_info_dicts and tool_panel_section_keys associated with the
+        received encoded_tsr_id by determining its location in the received
+        encoded_tsr_ids list.
         """
         for index, tsr_id in enumerate( encoded_tsr_ids ):
             if tsr_id == encoded_tsr_id:
@@ -775,15 +777,18 @@
                                       tool_panel_section_keys=tool_panel_section_keys,
                                       tool_path=tool_path,
                                       tool_shed_url=tool_shed_url )
-            # Prepare the repositories for installation.  Even though this method receives a single combination
-            # of tool_shed_url, name, owner and changeset_revision, there may be multiple repositories for installation
-            # at this point because repository dependencies may have added additional repositories for installation
-            # along with the single specified repository.
+            # Prepare the repositories for installation.  Even though this
+            # method receives a single combination of tool_shed_url, name,
+            # owner and changeset_revision, there may be multiple repositories
+            # for installation at this point because repository dependencies
+            # may have added additional repositories for installation along
+            # with the single specified repository.
             encoded_kwd, query, tool_shed_repositories, encoded_repository_ids = \
                 self.initiate_repository_installation( installation_dict )
-            # Some repositories may have repository dependencies that are required to be installed before the
-            # dependent repository, so we'll order the list of tsr_ids to ensure all repositories install in
-            # the required order.
+            # Some repositories may have repository dependencies that are
+            # required to be installed before the dependent repository, so
+            # we'll order the list of tsr_ids to ensure all repositories
+            # install in the required order.
             tsr_ids = [ self.app.security.encode_id( tool_shed_repository.id ) for tool_shed_repository in tool_shed_repositories ]
             ordered_tsr_ids, ordered_repo_info_dicts, ordered_tool_panel_section_keys = \
                 self.order_components_for_installation( tsr_ids, repo_info_dicts, tool_panel_section_keys=tool_panel_section_keys )
https://bitbucket.org/galaxy/galaxy-central/commits/77c9941c3d8b/
Changeset:   77c9941c3d8b
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     Refactor __install_repositories so it looks more like newer install_web.
Affected #:  1 file
diff -r 4a04ee11725e11127848775ae46e68818843e768 -r 77c9941c3d8befb3d2678862633f05216cca1c18 lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -709,8 +709,6 @@
         return installed_tool_shed_repositories
 
     def __install_repositories( self, tool_shed_url, repository_revision_dict, repo_info_dicts, install_options ):
-        # Keep track of all repositories that are installed - there may be more than one if repository dependencies are installed.
-        installed_tool_shed_repositories = []
         try:
             has_repository_dependencies = repository_revision_dict[ 'has_repository_dependencies' ]
         except KeyError:
@@ -790,6 +788,10 @@
             # we'll order the list of tsr_ids to ensure all repositories
             # install in the required order.
             tsr_ids = [ self.app.security.encode_id( tool_shed_repository.id ) for tool_shed_repository in tool_shed_repositories ]
+
+            # Keep track of all repositories that are installed - there may be more than one if repository dependencies are installed.
+            installed_tool_shed_repositories = []
+
             ordered_tsr_ids, ordered_repo_info_dicts, ordered_tool_panel_section_keys = \
                 self.order_components_for_installation( tsr_ids, repo_info_dicts, tool_panel_section_keys=tool_panel_section_keys )
             # Install the repositories, keeping track of each one for later display.
@@ -808,10 +810,10 @@
                                                        install_tool_dependencies,
                                                        reinstalling=False )
                     installed_tool_shed_repositories.append( tool_shed_repository )
+            return installed_tool_shed_repositories
         else:
             # We're attempting to install more than 1 repository, and all of them have already been installed.
             raise RepositoriesInstalledException()
-        return installed_tool_shed_repositories
 
     def install_web( self, trans, decoded_kwd, reinstalling ):
         shed_tool_conf = decoded_kwd.get( 'shed_tool_conf', '' )
https://bitbucket.org/galaxy/galaxy-central/commits/1b96a2122ea6/
Changeset:   1b96a2122ea6
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     Eliminate duplication between ts installing from API and web controller.
Favoring the web controller variant slightly - it is known to work better and has test coverage.
Affected #:  2 files
diff -r 77c9941c3d8befb3d2678862633f05216cca1c18 -r 1b96a2122ea6607e84e3fb89e5e9209fbd119fd4 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
@@ -679,10 +679,11 @@
                 encoded_kwd = kwd[ 'encoded_kwd' ]
                 decoded_kwd = encoding_util.tool_shed_decode( encoded_kwd )
                 install_tool_dependencies = CheckboxField.is_checked( decoded_kwd.get( 'install_tool_dependencies', '' ) )
+                tsr_ids = decoded_kwd[ 'tool_shed_repository_ids' ]
                 decoded_kwd['install_tool_dependencies'] = install_tool_dependencies
                 try:
-                    tool_shed_repositories = irm.install_web(
-                        trans=trans,
+                    tool_shed_repositories = irm.install_repositories(
+                        tsr_ids=tsr_ids,
                         decoded_kwd=decoded_kwd,
                         reinstalling=reinstalling,
                     )
diff -r 77c9941c3d8befb3d2678862633f05216cca1c18 -r 1b96a2122ea6607e84e3fb89e5e9209fbd119fd4 lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -702,13 +702,15 @@
                                                                                             name,
                                                                                             owner,
                                                                                             changeset_revision )
-        installed_tool_shed_repositories = self.__install_repositories( tool_shed_url,
-                                                                        repository_revision_dict,
-                                                                        repo_info_dicts,
-                                                                        install_options )
+        installed_tool_shed_repositories = self.__initiate_and_install_repositories(
+            tool_shed_url,
+            repository_revision_dict,
+            repo_info_dicts,
+            install_options
+        )
         return installed_tool_shed_repositories
 
-    def __install_repositories( self, tool_shed_url, repository_revision_dict, repo_info_dicts, install_options ):
+    def __initiate_and_install_repositories( self, tool_shed_url, repository_revision_dict, repo_info_dicts, install_options ):
         try:
             has_repository_dependencies = repository_revision_dict[ 'has_repository_dependencies' ]
         except KeyError:
@@ -789,36 +791,18 @@
             # install in the required order.
             tsr_ids = [ self.app.security.encode_id( tool_shed_repository.id ) for tool_shed_repository in tool_shed_repositories ]
 
-            # Keep track of all repositories that are installed - there may be more than one if repository dependencies are installed.
-            installed_tool_shed_repositories = []
+            decoded_kwd = dict(
+                shed_tool_conf=shed_tool_conf,
+                tool_path=tool_path,
+                tool_panel_section_keys=tool_panel_section_keys,
+                repo_info_dicts=repo_info_dicts,
+                install_tool_dependencies=install_tool_dependencies,
+            )
+            return self.install_repositories(tsr_ids, decoded_kwd, reinstalling=False)
 
-            ordered_tsr_ids, ordered_repo_info_dicts, ordered_tool_panel_section_keys = \
-                self.order_components_for_installation( tsr_ids, repo_info_dicts, tool_panel_section_keys=tool_panel_section_keys )
-            # Install the repositories, keeping track of each one for later display.
-            for index, tsr_id in enumerate( ordered_tsr_ids ):
-                tool_shed_repository = self.install_model.context.query( self.install_model.ToolShedRepository ) \
-                                                                 .get( self.app.security.decode_id( tsr_id ) )
-                if tool_shed_repository.status in [ self.install_model.ToolShedRepository.installation_status.NEW,
-                                                    self.install_model.ToolShedRepository.installation_status.UNINSTALLED ]:
-                    repo_info_dict = ordered_repo_info_dicts[ index ]
-                    tool_panel_section_key = ordered_tool_panel_section_keys[ index ]
-                    self.install_tool_shed_repository( tool_shed_repository,
-                                                       repo_info_dict,
-                                                       tool_panel_section_key,
-                                                       shed_tool_conf,
-                                                       tool_path,
-                                                       install_tool_dependencies,
-                                                       reinstalling=False )
-                    installed_tool_shed_repositories.append( tool_shed_repository )
-            return installed_tool_shed_repositories
-        else:
-            # We're attempting to install more than 1 repository, and all of them have already been installed.
-            raise RepositoriesInstalledException()
-
-    def install_web( self, trans, decoded_kwd, reinstalling ):
+    def install_repositories( self, tsr_ids, decoded_kwd, reinstalling ):
         shed_tool_conf = decoded_kwd.get( 'shed_tool_conf', '' )
         tool_path = decoded_kwd[ 'tool_path' ]
-        tsr_ids = decoded_kwd[ 'tool_shed_repository_ids' ]
         tool_panel_section_keys = util.listify( decoded_kwd[ 'tool_panel_section_keys' ] )
         repo_info_dicts = util.listify( decoded_kwd[ 'repo_info_dicts' ] )
         install_tool_dependencies = decoded_kwd['install_tool_dependencies']
@@ -833,10 +817,10 @@
                                                     repo_info_dicts,
                                                     tool_panel_section_keys=tool_panel_section_keys )
         for tsr_id in ordered_tsr_ids:
-            repository = trans.install_model.context.query( trans.install_model.ToolShedRepository ) \
-                                                    .get( trans.security.decode_id( tsr_id ) )
-            if repository.status in [ trans.install_model.ToolShedRepository.installation_status.NEW,
-                                      trans.install_model.ToolShedRepository.installation_status.UNINSTALLED ]:
+            repository = self.install_model.context.query( self.install_model.ToolShedRepository ) \
+                .get( self.app.security.decode_id( tsr_id ) )
+            if repository.status in [ self.install_model.ToolShedRepository.installation_status.NEW,
+                                      self.install_model.ToolShedRepository.installation_status.UNINSTALLED ]:
                 repositories_for_installation.append( repository )
                 repo_info_dict, tool_panel_section_key = \
                     self.get_repository_components_for_installation( tsr_id,
https://bitbucket.org/galaxy/galaxy-central/commits/ebe2008f5e49/
Changeset:   ebe2008f5e49
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     Use append_section abstraction.
Affected #:  1 file
diff -r 1b96a2122ea6607e84e3fb89e5e9209fbd119fd4 -r ebe2008f5e49998cc74264ee085e7e7a4fab57bc lib/galaxy/tools/toolbox/base.py
--- a/lib/galaxy/tools/toolbox/base.py
+++ b/lib/galaxy/tools/toolbox/base.py
@@ -237,7 +237,7 @@
                 'version': '',
             }
             tool_section = ToolSection( section_dict )
-            self._tool_panel[ tool_panel_section_key ] = tool_section
+            self._tool_panel.append_section( tool_panel_section_key, tool_section )
             log.debug( "Loading new tool panel section: %s" % str( tool_section.name ) )
         else:
             tool_section = None
https://bitbucket.org/galaxy/galaxy-central/commits/4f0678e797a1/
Changeset:   4f0678e797a1
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     PEP-8 in toolbox/base.py.
Affected #:  1 file
diff -r ebe2008f5e49998cc74264ee085e7e7a4fab57bc -r 4f0678e797a1247103459fba186c4dc8765b8aa2 lib/galaxy/tools/toolbox/base.py
--- a/lib/galaxy/tools/toolbox/base.py
+++ b/lib/galaxy/tools/toolbox/base.py
@@ -457,9 +457,9 @@
         if tool_id in self._tools_by_id and not get_all_versions:
             if tool_version and tool_version in self._tool_versions_by_id[ tool_id ]:
                 return self._tool_versions_by_id[ tool_id ][ tool_version ]
-            #tool_id exactly matches an available tool by id (which is 'old' tool_id or guid)
+            # tool_id exactly matches an available tool by id (which is 'old' tool_id or guid)
             return self._tools_by_id[ tool_id ]
-        #exact tool id match not found, or all versions requested, search for other options, e.g. migrated tools or different versions
+        # exact tool id match not found, or all versions requested, search for other options, e.g. migrated tools or different versions
         rval = []
         tool_lineage = self._lineage_map.get( tool_id )
         if tool_lineage:
@@ -469,7 +469,7 @@
                 if lineage_tool:
                     rval.append( lineage_tool )
         if not rval:
-            #still no tool, do a deeper search and try to match by old ids
+            # still no tool, do a deeper search and try to match by old ids
             for tool in self._tools_by_id.itervalues():
                 if tool.old_id == tool_id:
                     rval.append( tool )
@@ -478,14 +478,14 @@
                 return rval
             else:
                 if tool_version:
-                    #return first tool with matching version
+                    # return first tool with matching version
                     for tool in rval:
                         if tool.version == tool_version:
                             return tool
-                #No tool matches by version, simply return the first available tool found
+                # No tool matches by version, simply return the first available tool found
                 return rval[0]
-        #We now likely have a Toolshed guid passed in, but no supporting database entries
-        #If the tool exists by exact id and is loaded then provide exact match within a list
+        # We now likely have a Toolshed guid passed in, but no supporting database entries
+        # If the tool exists by exact id and is loaded then provide exact match within a list
         if tool_id in self._tools_by_id:
             return[ self._tools_by_id[ tool_id ] ]
         return None
@@ -1012,7 +1012,7 @@
                             break
                 if tool_id in self.data_manager_tools:
                     del self.data_manager_tools[ tool_id ]
-            #TODO: do we need to manually remove from the integrated panel here?
+            # TODO: do we need to manually remove from the integrated panel here?
             message = "Removed the tool:<br/>"
             message += "<b>name:</b> %s<br/>" % tool.name
             message += "<b>id:</b> %s<br/>" % tool.id
https://bitbucket.org/galaxy/galaxy-central/commits/0468d285f89c/
Changeset:   0468d285f89c
User:        jmchilton
Date:        2015-02-27 20:58:02+00:00
Summary:     Move integrated tool panel logic into its own module/mixin.
Affected #:  2 files
diff -r 4f0678e797a1247103459fba186c4dc8765b8aa2 -r 0468d285f89c799559926c94f300c42d05e8c47a lib/galaxy/tools/toolbox/base.py
--- a/lib/galaxy/tools/toolbox/base.py
+++ b/lib/galaxy/tools/toolbox/base.py
@@ -1,6 +1,5 @@
 import os
 import re
-import shutil
 import string
 import tarfile
 import tempfile
@@ -23,6 +22,7 @@
 from .panel import ToolSectionLabel
 from .panel import ToolSection
 from .panel import panel_item_types
+from .integrated_panel import ManagesIntegratedToolPanelMixin
 
 from .lineages import LineageMap
 from .tags import tool_tag_manager
@@ -37,22 +37,7 @@
 log = logging.getLogger( __name__ )
 
 
-INTEGRATED_TOOL_PANEL_DESCRIPTION = """
-This is Galaxy's integrated tool panel and should be modified directly only for
-reordering tools inside a section. Each time Galaxy starts up, this file is
-synchronized with the various tool config files: tools, sections and labels
-added to one of these files, will be added also here in the appropriate place,
-while elements removed from the tool config files will be correspondingly
-deleted from this file.
-To modify locally managed tools (e.g. from tool_conf.xml) modify that file
-directly and restart Galaxy. Whenever possible Tool Shed managed tools (e.g.
-from shed_tool_conf.xml) should be managed from within the Galaxy interface or
-via its API - but if changes are necessary (such as to hide a tool or re-assign
-its section) modify that file and restart Galaxy.
-"""
-
-
-class AbstractToolBox( object, Dictifiable ):
+class AbstractToolBox( object, Dictifiable, ManagesIntegratedToolPanelMixin ):
     """
     Abstract container for managing a ToolPanel - containing tools and
     workflows optionally in labelled sections.
@@ -78,15 +63,8 @@
         self._index = 0
         self.data_manager_tools = odict()
         self._lineage_map = LineageMap( app )
-        # File that contains the XML section and tool tags from all tool panel config files integrated into a
-        # single file that defines the tool panel layout.  This file can be changed by the Galaxy administrator
-        # (in a way similar to the single tool_conf.xml file in the past) to alter the layout of the tool panel.
-        self._integrated_tool_panel_config = app.config.integrated_tool_panel_config
-        # In-memory dictionary that defines the layout of the tool_panel.xml file on disk.
-        self._integrated_tool_panel = ToolPanelElements()
-        self._integrated_tool_panel_config_has_contents = os.path.exists( self._integrated_tool_panel_config ) and os.stat( self._integrated_tool_panel_config ).st_size > 0
-        if self._integrated_tool_panel_config_has_contents:
-            self._load_integrated_tool_panel_keys()
+        # Sets self._integrated_tool_panel and self._integrated_tool_panel_config_has_contents
+        self._init_integrated_tool_panel( app.config )
         # The following refers to the tool_path config setting for backward compatibility.  The shed-related
         # (e.g., shed_tool_conf.xml) files include the tool_path attribute within the <toolbox> tag.
         self._tool_root_dir = tool_root_dir
@@ -98,12 +76,7 @@
         if self.app.name == 'galaxy' and self._integrated_tool_panel_config_has_contents:
             # Load self._tool_panel based on the order in self._integrated_tool_panel.
             self._load_tool_panel()
-        if app.config.update_integrated_tool_panel:
-            # Write the current in-memory integrated_tool_panel to the integrated_tool_panel.xml file.
-            # This will cover cases where the Galaxy administrator manually edited one or more of the tool panel
-            # config files, adding or removing locally developed tools or workflows.  The value of integrated_tool_panel
-            # will be False when things like functional tests are the caller.
-            self._write_integrated_tool_panel_config_file()
+        self._save_integrated_tool_panel()
 
     def create_tool( self, config_file, repository_id=None, guid=None, **kwds ):
         raise NotImplementedError()
@@ -215,9 +188,8 @@
         for index, my_shed_tool_conf in enumerate( self._dynamic_tool_confs ):
             if shed_conf['config_filename'] == my_shed_tool_conf['config_filename']:
                 self._dynamic_tool_confs[ index ] = shed_conf
-        if integrated_panel_changes and app.config.update_integrated_tool_panel:
-            # Write the current in-memory version of the integrated_tool_panel.xml file to disk.
-            self._write_integrated_tool_panel_config_file()
+        if integrated_panel_changes:
+            self._save_integrated_tool_panel()
         app.reindex_tool_search()
 
     def get_section( self, section_id, new_label=None, create_if_needed=False ):
@@ -400,52 +372,6 @@
             elif elem.tag == 'label':
                 self._integrated_tool_panel.stub_label( key )
 
-    def _write_integrated_tool_panel_config_file( self ):
-        """
-        Write the current in-memory version of the integrated_tool_panel.xml file to disk.  Since Galaxy administrators
-        use this file to manage the tool panel, we'll not use xml_to_string() since it doesn't write XML quite right.
-        """
-        fd, filename = tempfile.mkstemp()
-        os.write( fd, '<?xml version="1.0"?>\n' )
-        os.write( fd, '<toolbox>\n' )
-        os.write( fd, '    <!--\n    ')
-        os.write( fd, '\n    '.join( [ l for l in INTEGRATED_TOOL_PANEL_DESCRIPTION.split("\n") if l ] ) )
-        os.write( fd, '\n    -->\n')
-        for key, item_type, item in self._integrated_tool_panel.panel_items_iter():
-            if item:
-                if item_type == panel_item_types.TOOL:
-                    os.write( fd, '    <tool id="%s" />\n' % item.id )
-                elif item_type == panel_item_types.WORKFLOW:
-                    os.write( fd, '    <workflow id="%s" />\n' % item.id )
-                elif item_type == panel_item_types.LABEL:
-                    label_id = item.id or ''
-                    label_text = item.text or ''
-                    label_version = item.version or ''
-                    os.write( fd, '    <label id="%s" text="%s" version="%s" />\n' % ( label_id, label_text, label_version ) )
-                elif item_type == panel_item_types.SECTION:
-                    section_id = item.id or ''
-                    section_name = item.name or ''
-                    section_version = item.version or ''
-                    os.write( fd, '    <section id="%s" name="%s" version="%s">\n' % ( section_id, section_name, section_version ) )
-                    for section_key, section_item_type, section_item in item.panel_items_iter():
-                        if section_item_type == panel_item_types.TOOL:
-                            if section_item:
-                                os.write( fd, '        <tool id="%s" />\n' % section_item.id )
-                        elif section_item_type == panel_item_types.WORKFLOW:
-                            if section_item:
-                                os.write( fd, '        <workflow id="%s" />\n' % section_item.id )
-                        elif section_item_type == panel_item_types.LABEL:
-                            if section_item:
-                                label_id = section_item.id or ''
-                                label_text = section_item.text or ''
-                                label_version = section_item.version or ''
-                                os.write( fd, '        <label id="%s" text="%s" version="%s" />\n' % ( label_id, label_text, label_version ) )
-                    os.write( fd, '    </section>\n' )
-        os.write( fd, '</toolbox>\n' )
-        os.close( fd )
-        shutil.move( filename, os.path.abspath( self._integrated_tool_panel_config ) )
-        os.chmod( self._integrated_tool_panel_config, 0644 )
-
     def get_tool( self, tool_id, tool_version=None, get_all_versions=False, exact=False ):
         """Attempt to locate a tool in the tool box."""
         if tool_version:
@@ -777,13 +703,7 @@
 
                 if async:
                     self._load_tool_panel()
-
-                    if self.app.config.update_integrated_tool_panel:
-                        # Write the current in-memory integrated_tool_panel to the integrated_tool_panel.xml file.
-                        # This will cover cases where the Galaxy administrator manually edited one or more of the tool panel
-                        # config files, adding or removing locally developed tools or workflows.  The value of integrated_tool_panel
-                        # will be False when things like functional tests are the caller.
-                        self._write_integrated_tool_panel_config_file()
+                    self._save_integrated_tool_panel()
                 return tool.id
             except Exception:
                 log.exception("Failed to load potential tool %s." % tool_file)
diff -r 4f0678e797a1247103459fba186c4dc8765b8aa2 -r 0468d285f89c799559926c94f300c42d05e8c47a lib/galaxy/tools/toolbox/integrated_panel.py
--- /dev/null
+++ b/lib/galaxy/tools/toolbox/integrated_panel.py
@@ -0,0 +1,87 @@
+import os
+import shutil
+import tempfile
+
+from .panel import ToolPanelElements
+from .panel import panel_item_types
+
+
+INTEGRATED_TOOL_PANEL_DESCRIPTION = """
+This is Galaxy's integrated tool panel and should be modified directly only for
+reordering tools inside a section. Each time Galaxy starts up, this file is
+synchronized with the various tool config files: tools, sections and labels
+added to one of these files, will be added also here in the appropriate place,
+while elements removed from the tool config files will be correspondingly
+deleted from this file.
+To modify locally managed tools (e.g. from tool_conf.xml) modify that file
+directly and restart Galaxy. Whenever possible Tool Shed managed tools (e.g.
+from shed_tool_conf.xml) should be managed from within the Galaxy interface or
+via its API - but if changes are necessary (such as to hide a tool or re-assign
+its section) modify that file and restart Galaxy.
+"""
+
+
+class ManagesIntegratedToolPanelMixin:
+
+    def _init_integrated_tool_panel(self, config):
+        self.update_integrated_tool_panel = config.update_integrated_tool_panel
+        self._integrated_tool_panel_config = config.integrated_tool_panel_config
+        # In-memory dictionary that defines the layout of the tool_panel.xml file on disk.
+        self._integrated_tool_panel = ToolPanelElements()
+        self._integrated_tool_panel_config_has_contents = os.path.exists( self._integrated_tool_panel_config ) and os.stat( self._integrated_tool_panel_config ).st_size > 0
+        if self._integrated_tool_panel_config_has_contents:
+            self._load_integrated_tool_panel_keys()
+
+    def _save_integrated_tool_panel(self):
+        if self.update_integrated_tool_panel:
+            # Write the current in-memory integrated_tool_panel to the integrated_tool_panel.xml file.
+            # This will cover cases where the Galaxy administrator manually edited one or more of the tool panel
+            # config files, adding or removing locally developed tools or workflows.  The value of integrated_tool_panel
+            # will be False when things like functional tests are the caller.
+            self._write_integrated_tool_panel_config_file()
+
+    def _write_integrated_tool_panel_config_file( self ):
+        """
+        Write the current in-memory version of the integrated_tool_panel.xml file to disk.  Since Galaxy administrators
+        use this file to manage the tool panel, we'll not use xml_to_string() since it doesn't write XML quite right.
+        """
+        fd, filename = tempfile.mkstemp()
+        os.write( fd, '<?xml version="1.0"?>\n' )
+        os.write( fd, '<toolbox>\n' )
+        os.write( fd, '    <!--\n    ')
+        os.write( fd, '\n    '.join( [ l for l in INTEGRATED_TOOL_PANEL_DESCRIPTION.split("\n") if l ] ) )
+        os.write( fd, '\n    -->\n')
+        for key, item_type, item in self._integrated_tool_panel.panel_items_iter():
+            if item:
+                if item_type == panel_item_types.TOOL:
+                    os.write( fd, '    <tool id="%s" />\n' % item.id )
+                elif item_type == panel_item_types.WORKFLOW:
+                    os.write( fd, '    <workflow id="%s" />\n' % item.id )
+                elif item_type == panel_item_types.LABEL:
+                    label_id = item.id or ''
+                    label_text = item.text or ''
+                    label_version = item.version or ''
+                    os.write( fd, '    <label id="%s" text="%s" version="%s" />\n' % ( label_id, label_text, label_version ) )
+                elif item_type == panel_item_types.SECTION:
+                    section_id = item.id or ''
+                    section_name = item.name or ''
+                    section_version = item.version or ''
+                    os.write( fd, '    <section id="%s" name="%s" version="%s">\n' % ( section_id, section_name, section_version ) )
+                    for section_key, section_item_type, section_item in item.panel_items_iter():
+                        if section_item_type == panel_item_types.TOOL:
+                            if section_item:
+                                os.write( fd, '        <tool id="%s" />\n' % section_item.id )
+                        elif section_item_type == panel_item_types.WORKFLOW:
+                            if section_item:
+                                os.write( fd, '        <workflow id="%s" />\n' % section_item.id )
+                        elif section_item_type == panel_item_types.LABEL:
+                            if section_item:
+                                label_id = section_item.id or ''
+                                label_text = section_item.text or ''
+                                label_version = section_item.version or ''
+                                os.write( fd, '        <label id="%s" text="%s" version="%s" />\n' % ( label_id, label_text, label_version ) )
+                    os.write( fd, '    </section>\n' )
+        os.write( fd, '</toolbox>\n' )
+        os.close( fd )
+        shutil.move( filename, os.path.abspath( self._integrated_tool_panel_config ) )
+        os.chmod( self._integrated_tool_panel_config, 0644 )
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
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                          Branch: refs/tags/0.5
  Home:   https://github.com/galaxyproject/ansible-galaxy
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    27 Feb '15
                    
                          Branch: refs/heads/master
  Home:   https://github.com/galaxyproject/ansible-galaxy
  Commit: 558d46ede9bc65567f921de3b6ecf2dc53361df2
      https://github.com/galaxyproject/ansible-galaxy/commit/558d46ede9bc65567f92…
  Author: Nate Coraor <nate(a)bx.psu.edu>
  Date:   2015-02-27 (Fri, 27 Feb 2015)
  Changed paths:
    M README.md
    M defaults/main.yml
    M meta/main.yml
    M tasks/clone.yml
  Log Message:
  -----------
  Optional git clone/pull functionality.
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [galaxyproject/usegalaxy-playbook] f3642c: Update datatypes_conf.xml for typo in text module ...
                        
                        
by GitHub 27 Feb '15
                    by GitHub 27 Feb '15
27 Feb '15
                    
                          Branch: refs/heads/master
  Home:   https://github.com/galaxyproject/usegalaxy-playbook
  Commit: f3642c0b59048b1efab4878fbffc56c3c1c6c0c3
      https://github.com/galaxyproject/usegalaxy-playbook/commit/f3642c0b59048b1e…
  Author: Nate Coraor <nate(a)bx.psu.edu>
  Date:   2015-02-27 (Fri, 27 Feb 2015)
  Changed paths:
    M templates/galaxy/test.galaxyproject.org/config/datatypes_conf.xml.j2
    M templates/galaxy/usegalaxy.org/config/datatypes_conf.xml.j2
  Log Message:
  -----------
  Update datatypes_conf.xml for typo in text module name.
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                          Branch: refs/heads/master
  Home:   https://github.com/galaxyproject/usegalaxy-playbook
  Commit: b970a8db17fbcce3b733ab2901d9665f199b534b
      https://github.com/galaxyproject/usegalaxy-playbook/commit/b970a8db17fbcce3…
  Author: Nate Coraor <nate(a)bx.psu.edu>
  Date:   2015-02-27 (Fri, 27 Feb 2015)
  Changed paths:
    M stage/group_vars/all.yml
  Log Message:
  -----------
  Update Test
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                        2 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/f84ae130824f/
Changeset:   f84ae130824f
Branch:      release_15.03
User:        guerler
Date:        2015-02-27 18:43:39+00:00
Summary:     ToolForm: Make deep copy of current state in order to be on the safe side
Affected #:  3 files
diff -r 2a238115b21ccce4391355329e322132716daecc -r f84ae130824f6a1ef03214ac0ba43dbeaeedc5bc client/galaxy/scripts/mvc/tools/tools-form-base.js
--- a/client/galaxy/scripts/mvc/tools/tools-form-base.js
+++ b/client/galaxy/scripts/mvc/tools/tools-form-base.js
@@ -108,7 +108,7 @@
                     var new_state = self.tree.finalize();
                     if (!_.isEqual(new_state, current_state)) {
                         current_state = new_state;
-                        self._updateModel($.extend({}, current_state));
+                        self._updateModel($.extend(true, {}, current_state));
                     }
                 });
             });
diff -r 2a238115b21ccce4391355329e322132716daecc -r f84ae130824f6a1ef03214ac0ba43dbeaeedc5bc static/scripts/mvc/tools/tools-form-base.js
--- a/static/scripts/mvc/tools/tools-form-base.js
+++ b/static/scripts/mvc/tools/tools-form-base.js
@@ -108,7 +108,7 @@
                     var new_state = self.tree.finalize();
                     if (!_.isEqual(new_state, current_state)) {
                         current_state = new_state;
-                        self._updateModel($.extend({}, current_state));
+                        self._updateModel($.extend(true, {}, current_state));
                     }
                 });
             });
diff -r 2a238115b21ccce4391355329e322132716daecc -r f84ae130824f6a1ef03214ac0ba43dbeaeedc5bc static/scripts/packed/mvc/tools/tools-form-base.js
--- a/static/scripts/packed/mvc/tools/tools-form-base.js
+++ b/static/scripts/packed/mvc/tools/tools-form-base.js
@@ -1,1 +1,1 @@
-define(["utils/utils","utils/deferred","mvc/ui/ui-portlet","mvc/ui/ui-misc","mvc/citation/citation-model","mvc/citation/citation-view","mvc/tools","mvc/tools/tools-template","mvc/tools/tools-content","mvc/tools/tools-section","mvc/tools/tools-tree"],function(g,h,f,k,i,a,d,c,e,j,b){return Backbone.View.extend({initialize:function(l){this.optionsDefault={is_dynamic:true,narrow:false,initial_errors:false,cls_portlet:"ui-portlet-limited"};this.options=g.merge(l,this.optionsDefault);console.debug(this.options);var m=parent.Galaxy;if(m&&m.modal){this.modal=m.modal}else{this.modal=new k.Modal.View()}if(m&&m.currUser){this.is_admin=m.currUser.get("is_admin")}else{this.is_admin=false}this.container=this.options.container||"body";this.deferred=new h();this.setElement("<div/>");$(this.container).append(this.$el);this.build(this.options)},build:function(n){var l=this;this.off("refresh");this.off("reset");this.field_list={};this.input_list={};this.element_list={};this.tree=new b(this);this.content=new e(this);l.options.inputs=n&&n.inputs;this._renderForm(n);var m=this.tree.finalize();if(n.initial_errors){this._errors(n)}this.on("refresh",function(){l.deferred.reset();l.deferred.execute(function(){var o=l.tree.finalize();if(!_.isEqual(o,m)){m=o;l._updateModel($.extend({},m))}})});this.on("reset",function(){for(var o in this.element_list){this.element_list[o].reset()}})},reciept:function(l){$(this.container).empty();$(this.container).append(l)},highlight:function(m,n,l){var o=this.element_list[m];if(o){o.error(n||"Please verify this parameter.");if(!l){$("html, body").animate({scrollTop:o.$el.offset().top-20},500)}}},_errors:function(n){this.trigger("reset");if(n&&n.errors){var o=this.tree.matchResponse(n.errors);for(var m in this.element_list){var l=this.element_list[m];if(o[m]){this.highlight(m,o[m],true)}}}},_renderForm:function(t){var s=this;this.message=new k.Message();var m=new k.ButtonMenu({icon:"fa-cubes",title:(!t.narrow&&"Versions")||null,tooltip:"Select another tool version"});if(t.versions&&t.versions.length>1){for(var o in t.versions){var q=t.versions[o];if(q!=t.version){m.addMenu({title:"Switch to "+q,version:q,icon:"fa-cube",onclick:function(){s.options.id=s.options.id.replace(s.options.version,this.version);s.options.version=this.version;s.deferred.reset();s.deferred.execute(function(){s._buildModel()})}})}}}else{m.$el.hide()}var p=new k.ButtonMenu({icon:"fa-caret-down",title:(!t.narrow&&"Options")||null,tooltip:"View available options"});if(t.biostar_url){p.addMenu({icon:"fa-question-circle",title:"Question?",tooltip:"Ask a question about this tool (Biostar)",onclick:function(){window.open(t.biostar_url+"/p/new/post/")}});p.addMenu({icon:"fa-search",title:"Search",tooltip:"Search help for this tool (Biostar)",onclick:function(){window.open(t.biostar_url+"/t/"+t.id+"/")}})}p.addMenu({icon:"fa-share",title:"Share",tooltip:"Share this tool",onclick:function(){prompt("Copy to clipboard: Ctrl+C, Enter",window.location.origin+galaxy_config.root+"root?tool_id="+t.id)}});if(this.is_admin){p.addMenu({icon:"fa-download",title:"Download",tooltip:"Download this tool",onclick:function(){window.location.href=galaxy_config.root+"api/tools/"+t.id+"/download"}})}if(t.requirements&&t.requirements.length>0){p.addMenu({icon:"fa-info-circle",title:"Requirements",tooltip:"Display tool requirements",onclick:function(){if(!this.visible){this.visible=true;s.message.update({persistent:true,message:c.requirements(t),status:"info"})}else{this.visible=false;s.message.update({message:""})}}})}if(this.options.sharable_url){p.addMenu({icon:"fa-external-link",title:"See in Tool Shed",tooltip:"Access the repository",onclick:function(){window.open(s.options.sharable_url)}})}this.section=new j.View(s,{inputs:t.inputs});if(this.incompatible){this.$el.hide();$("#tool-form-classic").show();return}this.portlet=new f.View({icon:"fa-wrench",title:"<b>"+t.name+"</b> "+t.description+" (Galaxy Tool Version "+t.version+")",cls:this.options.cls_portlet,operations:{menu:p,versions:m},buttons:this.buttons});this.portlet.append(this.message.$el.addClass("ui-margin-top"));this.portlet.append(this.section.$el);this.$el.empty();this.$el.append(this.portlet.$el);if(t.help!=""){this.$el.append(c.help(t.help))}if(t.citations){var r=$("<div/>");var l=new i.ToolCitationCollection();l.tool_id=t.id;var n=new a.CitationListView({el:r,collection:l});n.render();l.fetch();this.$el.append(r)}if(t.message){this.message.update({persistent:true,status:"warning",message:t.message})}console.debug("tools-form-base::initialize() - Completed.")}})});
\ No newline at end of file
+define(["utils/utils","utils/deferred","mvc/ui/ui-portlet","mvc/ui/ui-misc","mvc/citation/citation-model","mvc/citation/citation-view","mvc/tools","mvc/tools/tools-template","mvc/tools/tools-content","mvc/tools/tools-section","mvc/tools/tools-tree"],function(g,h,f,k,i,a,d,c,e,j,b){return Backbone.View.extend({initialize:function(l){this.optionsDefault={is_dynamic:true,narrow:false,initial_errors:false,cls_portlet:"ui-portlet-limited"};this.options=g.merge(l,this.optionsDefault);console.debug(this.options);var m=parent.Galaxy;if(m&&m.modal){this.modal=m.modal}else{this.modal=new k.Modal.View()}if(m&&m.currUser){this.is_admin=m.currUser.get("is_admin")}else{this.is_admin=false}this.container=this.options.container||"body";this.deferred=new h();this.setElement("<div/>");$(this.container).append(this.$el);this.build(this.options)},build:function(n){var l=this;this.off("refresh");this.off("reset");this.field_list={};this.input_list={};this.element_list={};this.tree=new b(this);this.content=new e(this);l.options.inputs=n&&n.inputs;this._renderForm(n);var m=this.tree.finalize();if(n.initial_errors){this._errors(n)}this.on("refresh",function(){l.deferred.reset();l.deferred.execute(function(){var o=l.tree.finalize();if(!_.isEqual(o,m)){m=o;l._updateModel($.extend(true,{},m))}})});this.on("reset",function(){for(var o in this.element_list){this.element_list[o].reset()}})},reciept:function(l){$(this.container).empty();$(this.container).append(l)},highlight:function(m,n,l){var o=this.element_list[m];if(o){o.error(n||"Please verify this parameter.");if(!l){$("html, body").animate({scrollTop:o.$el.offset().top-20},500)}}},_errors:function(n){this.trigger("reset");if(n&&n.errors){var o=this.tree.matchResponse(n.errors);for(var m in this.element_list){var l=this.element_list[m];if(o[m]){this.highlight(m,o[m],true)}}}},_renderForm:function(t){var s=this;this.message=new k.Message();var m=new k.ButtonMenu({icon:"fa-cubes",title:(!t.narrow&&"Versions")||null,tooltip:"Select another tool version"});if(t.versions&&t.versions.length>1){for(var o in t.versions){var q=t.versions[o];if(q!=t.version){m.addMenu({title:"Switch to "+q,version:q,icon:"fa-cube",onclick:function(){s.options.id=s.options.id.replace(s.options.version,this.version);s.options.version=this.version;s.deferred.reset();s.deferred.execute(function(){s._buildModel()})}})}}}else{m.$el.hide()}var p=new k.ButtonMenu({icon:"fa-caret-down",title:(!t.narrow&&"Options")||null,tooltip:"View available options"});if(t.biostar_url){p.addMenu({icon:"fa-question-circle",title:"Question?",tooltip:"Ask a question about this tool (Biostar)",onclick:function(){window.open(t.biostar_url+"/p/new/post/")}});p.addMenu({icon:"fa-search",title:"Search",tooltip:"Search help for this tool (Biostar)",onclick:function(){window.open(t.biostar_url+"/t/"+t.id+"/")}})}p.addMenu({icon:"fa-share",title:"Share",tooltip:"Share this tool",onclick:function(){prompt("Copy to clipboard: Ctrl+C, Enter",window.location.origin+galaxy_config.root+"root?tool_id="+t.id)}});if(this.is_admin){p.addMenu({icon:"fa-download",title:"Download",tooltip:"Download this tool",onclick:function(){window.location.href=galaxy_config.root+"api/tools/"+t.id+"/download"}})}if(t.requirements&&t.requirements.length>0){p.addMenu({icon:"fa-info-circle",title:"Requirements",tooltip:"Display tool requirements",onclick:function(){if(!this.visible){this.visible=true;s.message.update({persistent:true,message:c.requirements(t),status:"info"})}else{this.visible=false;s.message.update({message:""})}}})}if(this.options.sharable_url){p.addMenu({icon:"fa-external-link",title:"See in Tool Shed",tooltip:"Access the repository",onclick:function(){window.open(s.options.sharable_url)}})}this.section=new j.View(s,{inputs:t.inputs});if(this.incompatible){this.$el.hide();$("#tool-form-classic").show();return}this.portlet=new f.View({icon:"fa-wrench",title:"<b>"+t.name+"</b> "+t.description+" (Galaxy Tool Version "+t.version+")",cls:this.options.cls_portlet,operations:{menu:p,versions:m},buttons:this.buttons});this.portlet.append(this.message.$el.addClass("ui-margin-top"));this.portlet.append(this.section.$el);this.$el.empty();this.$el.append(this.portlet.$el);if(t.help!=""){this.$el.append(c.help(t.help))}if(t.citations){var r=$("<div/>");var l=new i.ToolCitationCollection();l.tool_id=t.id;var n=new a.CitationListView({el:r,collection:l});n.render();l.fetch();this.$el.append(r)}if(t.message){this.message.update({persistent:true,status:"warning",message:t.message})}console.debug("tools-form-base::initialize() - Completed.")}})});
\ No newline at end of file
https://bitbucket.org/galaxy/galaxy-central/commits/12a2f4524350/
Changeset:   12a2f4524350
Branch:      release_15.03
User:        natefoo
Date:        2015-02-27 19:21:22+00:00
Summary:     Fix a typo in datatypes_conf.xml.sample
Affected #:  1 file
diff -r f84ae130824f6a1ef03214ac0ba43dbeaeedc5bc -r 12a2f45243502295e324bf6656481a98c61101c0 config/datatypes_conf.xml.sample
--- a/config/datatypes_conf.xml.sample
+++ b/config/datatypes_conf.xml.sample
@@ -180,7 +180,7 @@
     <datatype extension="scf" type="galaxy.datatypes.binary:Scf" mimetype="application/octet-stream" display_in_upload="true" description="A binary sequence file in 'scf' format with a '.scf' file extension.  You must manually select this 'File Format' when uploading the file." description_url="https://wiki.galaxyproject.org/Learn/Datatypes#Scf"/><datatype extension="Sequences" type="galaxy.datatypes.assembly:Sequences" display_in_upload="false"/><datatype extension="snpeffdb" type="galaxy.datatypes.text:SnpEffDb" display_in_upload="True"/>
-    <datatype extension="snpsiftdbnsfp" type="galaxy.datatypes.txt:SnpSiftDbNSFP" display_in_upload="True"/>
+    <datatype extension="snpsiftdbnsfp" type="galaxy.datatypes.text:SnpSiftDbNSFP" display_in_upload="True"/><datatype extension="dbnsfp.tabular" type="galaxy.datatypes.tabular:Tabular" subclass="True" display_in_upload="True"><converter file="tabular_to_dbnsfp.xml" target_datatype="snpsiftdbnsfp"/></datatype>
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
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                        4 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/2d3cbc0bf197/
Changeset:   2d3cbc0bf197
User:        natefoo
Date:        2015-02-27 16:35:13+00:00
Summary:     Add some pointers for developers and deployers in README.rst regarding
the Github move.
Affected #:  1 file
diff -r 8b70692766ec172eb4ac141a5d7266b88526f852 -r 2d3cbc0bf1971ab40a3d0b079aea7f6c48e50f12 README.rst
--- a/README.rst
+++ b/README.rst
@@ -38,7 +38,7 @@
 https://wiki.galaxyproject.org/Admin/Tools/ToolDependencies
 
 Issues
-------
+======
 
 Issues can be submitted to trello via the `galaxyproject
 website <http://galaxyproject.org/trello/>`__ and viewed on the `Galaxy
@@ -51,6 +51,19 @@
 Galaxy welcomes new development! There is extensive documentation on developing
 with Galaxy on the `wiki <https://wiki.galaxyproject.org/Develop>`__.
 
+Source Repository
+-----------------
+
+Galaxy development has moved to `Github
+<https://github.com/galaxyproject/galaxy>`__.
+
+**Developers** should develop against the ``dev`` branch in the Github
+repository.
+
+**Deployers** can continue to pull Galaxy changes from Bitbucket without
+interruption. Alternatively, deployers can track the ``master`` branch in
+Github.
+
 Syncing a Fork
 --------------
 
https://bitbucket.org/galaxy/galaxy-central/commits/097f826b47ee/
Changeset:   097f826b47ee
User:        martenson
Date:        2015-02-27 18:29:05+00:00
Summary:     use proper placeholder instead of input value
to prevent various search glitches
Affected #:  2 files
diff -r 2d3cbc0bf1971ab40a3d0b079aea7f6c48e50f12 -r 097f826b47ee3d758e51dbebede467c15f496846 client/galaxy/scripts/templates/tool_search.handlebars
--- a/client/galaxy/scripts/templates/tool_search.handlebars
+++ b/client/galaxy/scripts/templates/tool_search.handlebars
@@ -1,3 +1,3 @@
-<input type="text" name="query" value="{{search_hint_string}}" id="tool-search-query" autocomplete="off" class="search-query parent-width" />
+<input type="text" name="query" placeholder="{{search_hint_string}}" id="tool-search-query" autocomplete="off" class="search-query parent-width" /><a id="search-clear-btn" title="clear search (esc)"></a>
-<img src="{{spinner_url}}" id="search-spinner" class="search-spinner"/>
\ No newline at end of file
+<img src="{{spinner_url}}" id="search-spinner" class="search-spinner"/>
diff -r 2d3cbc0bf1971ab40a3d0b079aea7f6c48e50f12 -r 097f826b47ee3d758e51dbebede467c15f496846 static/scripts/templates/tool_search.handlebars
--- a/static/scripts/templates/tool_search.handlebars
+++ b/static/scripts/templates/tool_search.handlebars
@@ -1,3 +1,3 @@
-<input type="text" name="query" value="{{search_hint_string}}" id="tool-search-query" autocomplete="off" class="search-query parent-width" />
+<input type="text" name="query" placeholder="{{search_hint_string}}" id="tool-search-query" autocomplete="off" class="search-query parent-width" /><a id="search-clear-btn" title="clear search (esc)"></a>
-<img src="{{spinner_url}}" id="search-spinner" class="search-spinner"/>
\ No newline at end of file
+<img src="{{spinner_url}}" id="search-spinner" class="search-spinner"/>
https://bitbucket.org/galaxy/galaxy-central/commits/99d18d1fa46b/
Changeset:   99d18d1fa46b
User:        guerler
Date:        2015-02-27 18:43:39+00:00
Summary:     ToolForm: Make deep copy of current state in order to be on the safe side
Affected #:  3 files
diff -r 097f826b47ee3d758e51dbebede467c15f496846 -r 99d18d1fa46b506225dad08b0688212c9493edba client/galaxy/scripts/mvc/tools/tools-form-base.js
--- a/client/galaxy/scripts/mvc/tools/tools-form-base.js
+++ b/client/galaxy/scripts/mvc/tools/tools-form-base.js
@@ -108,7 +108,7 @@
                     var new_state = self.tree.finalize();
                     if (!_.isEqual(new_state, current_state)) {
                         current_state = new_state;
-                        self._updateModel($.extend({}, current_state));
+                        self._updateModel($.extend(true, {}, current_state));
                     }
                 });
             });
diff -r 097f826b47ee3d758e51dbebede467c15f496846 -r 99d18d1fa46b506225dad08b0688212c9493edba static/scripts/mvc/tools/tools-form-base.js
--- a/static/scripts/mvc/tools/tools-form-base.js
+++ b/static/scripts/mvc/tools/tools-form-base.js
@@ -108,7 +108,7 @@
                     var new_state = self.tree.finalize();
                     if (!_.isEqual(new_state, current_state)) {
                         current_state = new_state;
-                        self._updateModel($.extend({}, current_state));
+                        self._updateModel($.extend(true, {}, current_state));
                     }
                 });
             });
diff -r 097f826b47ee3d758e51dbebede467c15f496846 -r 99d18d1fa46b506225dad08b0688212c9493edba static/scripts/packed/mvc/tools/tools-form-base.js
--- a/static/scripts/packed/mvc/tools/tools-form-base.js
+++ b/static/scripts/packed/mvc/tools/tools-form-base.js
@@ -1,1 +1,1 @@
-define(["utils/utils","utils/deferred","mvc/ui/ui-portlet","mvc/ui/ui-misc","mvc/citation/citation-model","mvc/citation/citation-view","mvc/tools","mvc/tools/tools-template","mvc/tools/tools-content","mvc/tools/tools-section","mvc/tools/tools-tree"],function(g,h,f,k,i,a,d,c,e,j,b){return Backbone.View.extend({initialize:function(l){this.optionsDefault={is_dynamic:true,narrow:false,initial_errors:false,cls_portlet:"ui-portlet-limited"};this.options=g.merge(l,this.optionsDefault);console.debug(this.options);var m=parent.Galaxy;if(m&&m.modal){this.modal=m.modal}else{this.modal=new k.Modal.View()}if(m&&m.currUser){this.is_admin=m.currUser.get("is_admin")}else{this.is_admin=false}this.container=this.options.container||"body";this.deferred=new h();this.setElement("<div/>");$(this.container).append(this.$el);this.build(this.options)},build:function(n){var l=this;this.off("refresh");this.off("reset");this.field_list={};this.input_list={};this.element_list={};this.tree=new b(this);this.content=new e(this);l.options.inputs=n&&n.inputs;this._renderForm(n);var m=this.tree.finalize();if(n.initial_errors){this._errors(n)}this.on("refresh",function(){l.deferred.reset();l.deferred.execute(function(){var o=l.tree.finalize();if(!_.isEqual(o,m)){m=o;l._updateModel($.extend({},m))}})});this.on("reset",function(){for(var o in this.element_list){this.element_list[o].reset()}})},reciept:function(l){$(this.container).empty();$(this.container).append(l)},highlight:function(m,n,l){var o=this.element_list[m];if(o){o.error(n||"Please verify this parameter.");if(!l){$("html, body").animate({scrollTop:o.$el.offset().top-20},500)}}},_errors:function(n){this.trigger("reset");if(n&&n.errors){var o=this.tree.matchResponse(n.errors);for(var m in this.element_list){var l=this.element_list[m];if(o[m]){this.highlight(m,o[m],true)}}}},_renderForm:function(t){var s=this;this.message=new k.Message();var m=new k.ButtonMenu({icon:"fa-cubes",title:(!t.narrow&&"Versions")||null,tooltip:"Select another tool version"});if(t.versions&&t.versions.length>1){for(var o in t.versions){var q=t.versions[o];if(q!=t.version){m.addMenu({title:"Switch to "+q,version:q,icon:"fa-cube",onclick:function(){s.options.id=s.options.id.replace(s.options.version,this.version);s.options.version=this.version;s.deferred.reset();s.deferred.execute(function(){s._buildModel()})}})}}}else{m.$el.hide()}var p=new k.ButtonMenu({icon:"fa-caret-down",title:(!t.narrow&&"Options")||null,tooltip:"View available options"});if(t.biostar_url){p.addMenu({icon:"fa-question-circle",title:"Question?",tooltip:"Ask a question about this tool (Biostar)",onclick:function(){window.open(t.biostar_url+"/p/new/post/")}});p.addMenu({icon:"fa-search",title:"Search",tooltip:"Search help for this tool (Biostar)",onclick:function(){window.open(t.biostar_url+"/t/"+t.id+"/")}})}p.addMenu({icon:"fa-share",title:"Share",tooltip:"Share this tool",onclick:function(){prompt("Copy to clipboard: Ctrl+C, Enter",window.location.origin+galaxy_config.root+"root?tool_id="+t.id)}});if(this.is_admin){p.addMenu({icon:"fa-download",title:"Download",tooltip:"Download this tool",onclick:function(){window.location.href=galaxy_config.root+"api/tools/"+t.id+"/download"}})}if(t.requirements&&t.requirements.length>0){p.addMenu({icon:"fa-info-circle",title:"Requirements",tooltip:"Display tool requirements",onclick:function(){if(!this.visible){this.visible=true;s.message.update({persistent:true,message:c.requirements(t),status:"info"})}else{this.visible=false;s.message.update({message:""})}}})}if(this.options.sharable_url){p.addMenu({icon:"fa-external-link",title:"See in Tool Shed",tooltip:"Access the repository",onclick:function(){window.open(s.options.sharable_url)}})}this.section=new j.View(s,{inputs:t.inputs});if(this.incompatible){this.$el.hide();$("#tool-form-classic").show();return}this.portlet=new f.View({icon:"fa-wrench",title:"<b>"+t.name+"</b> "+t.description+" (Galaxy Tool Version "+t.version+")",cls:this.options.cls_portlet,operations:{menu:p,versions:m},buttons:this.buttons});this.portlet.append(this.message.$el.addClass("ui-margin-top"));this.portlet.append(this.section.$el);this.$el.empty();this.$el.append(this.portlet.$el);if(t.help!=""){this.$el.append(c.help(t.help))}if(t.citations){var r=$("<div/>");var l=new i.ToolCitationCollection();l.tool_id=t.id;var n=new a.CitationListView({el:r,collection:l});n.render();l.fetch();this.$el.append(r)}if(t.message){this.message.update({persistent:true,status:"warning",message:t.message})}console.debug("tools-form-base::initialize() - Completed.")}})});
\ No newline at end of file
+define(["utils/utils","utils/deferred","mvc/ui/ui-portlet","mvc/ui/ui-misc","mvc/citation/citation-model","mvc/citation/citation-view","mvc/tools","mvc/tools/tools-template","mvc/tools/tools-content","mvc/tools/tools-section","mvc/tools/tools-tree"],function(g,h,f,k,i,a,d,c,e,j,b){return Backbone.View.extend({initialize:function(l){this.optionsDefault={is_dynamic:true,narrow:false,initial_errors:false,cls_portlet:"ui-portlet-limited"};this.options=g.merge(l,this.optionsDefault);console.debug(this.options);var m=parent.Galaxy;if(m&&m.modal){this.modal=m.modal}else{this.modal=new k.Modal.View()}if(m&&m.currUser){this.is_admin=m.currUser.get("is_admin")}else{this.is_admin=false}this.container=this.options.container||"body";this.deferred=new h();this.setElement("<div/>");$(this.container).append(this.$el);this.build(this.options)},build:function(n){var l=this;this.off("refresh");this.off("reset");this.field_list={};this.input_list={};this.element_list={};this.tree=new b(this);this.content=new e(this);l.options.inputs=n&&n.inputs;this._renderForm(n);var m=this.tree.finalize();if(n.initial_errors){this._errors(n)}this.on("refresh",function(){l.deferred.reset();l.deferred.execute(function(){var o=l.tree.finalize();if(!_.isEqual(o,m)){m=o;l._updateModel($.extend(true,{},m))}})});this.on("reset",function(){for(var o in this.element_list){this.element_list[o].reset()}})},reciept:function(l){$(this.container).empty();$(this.container).append(l)},highlight:function(m,n,l){var o=this.element_list[m];if(o){o.error(n||"Please verify this parameter.");if(!l){$("html, body").animate({scrollTop:o.$el.offset().top-20},500)}}},_errors:function(n){this.trigger("reset");if(n&&n.errors){var o=this.tree.matchResponse(n.errors);for(var m in this.element_list){var l=this.element_list[m];if(o[m]){this.highlight(m,o[m],true)}}}},_renderForm:function(t){var s=this;this.message=new k.Message();var m=new k.ButtonMenu({icon:"fa-cubes",title:(!t.narrow&&"Versions")||null,tooltip:"Select another tool version"});if(t.versions&&t.versions.length>1){for(var o in t.versions){var q=t.versions[o];if(q!=t.version){m.addMenu({title:"Switch to "+q,version:q,icon:"fa-cube",onclick:function(){s.options.id=s.options.id.replace(s.options.version,this.version);s.options.version=this.version;s.deferred.reset();s.deferred.execute(function(){s._buildModel()})}})}}}else{m.$el.hide()}var p=new k.ButtonMenu({icon:"fa-caret-down",title:(!t.narrow&&"Options")||null,tooltip:"View available options"});if(t.biostar_url){p.addMenu({icon:"fa-question-circle",title:"Question?",tooltip:"Ask a question about this tool (Biostar)",onclick:function(){window.open(t.biostar_url+"/p/new/post/")}});p.addMenu({icon:"fa-search",title:"Search",tooltip:"Search help for this tool (Biostar)",onclick:function(){window.open(t.biostar_url+"/t/"+t.id+"/")}})}p.addMenu({icon:"fa-share",title:"Share",tooltip:"Share this tool",onclick:function(){prompt("Copy to clipboard: Ctrl+C, Enter",window.location.origin+galaxy_config.root+"root?tool_id="+t.id)}});if(this.is_admin){p.addMenu({icon:"fa-download",title:"Download",tooltip:"Download this tool",onclick:function(){window.location.href=galaxy_config.root+"api/tools/"+t.id+"/download"}})}if(t.requirements&&t.requirements.length>0){p.addMenu({icon:"fa-info-circle",title:"Requirements",tooltip:"Display tool requirements",onclick:function(){if(!this.visible){this.visible=true;s.message.update({persistent:true,message:c.requirements(t),status:"info"})}else{this.visible=false;s.message.update({message:""})}}})}if(this.options.sharable_url){p.addMenu({icon:"fa-external-link",title:"See in Tool Shed",tooltip:"Access the repository",onclick:function(){window.open(s.options.sharable_url)}})}this.section=new j.View(s,{inputs:t.inputs});if(this.incompatible){this.$el.hide();$("#tool-form-classic").show();return}this.portlet=new f.View({icon:"fa-wrench",title:"<b>"+t.name+"</b> "+t.description+" (Galaxy Tool Version "+t.version+")",cls:this.options.cls_portlet,operations:{menu:p,versions:m},buttons:this.buttons});this.portlet.append(this.message.$el.addClass("ui-margin-top"));this.portlet.append(this.section.$el);this.$el.empty();this.$el.append(this.portlet.$el);if(t.help!=""){this.$el.append(c.help(t.help))}if(t.citations){var r=$("<div/>");var l=new i.ToolCitationCollection();l.tool_id=t.id;var n=new a.CitationListView({el:r,collection:l});n.render();l.fetch();this.$el.append(r)}if(t.message){this.message.update({persistent:true,status:"warning",message:t.message})}console.debug("tools-form-base::initialize() - Completed.")}})});
\ No newline at end of file
https://bitbucket.org/galaxy/galaxy-central/commits/179c7c3fbb0d/
Changeset:   179c7c3fbb0d
User:        natefoo
Date:        2015-02-27 19:21:22+00:00
Summary:     Fix a typo in datatypes_conf.xml.sample
Affected #:  1 file
diff -r 99d18d1fa46b506225dad08b0688212c9493edba -r 179c7c3fbb0db10765a97eb632bfc34c570ef0ff config/datatypes_conf.xml.sample
--- a/config/datatypes_conf.xml.sample
+++ b/config/datatypes_conf.xml.sample
@@ -180,7 +180,7 @@
     <datatype extension="scf" type="galaxy.datatypes.binary:Scf" mimetype="application/octet-stream" display_in_upload="true" description="A binary sequence file in 'scf' format with a '.scf' file extension.  You must manually select this 'File Format' when uploading the file." description_url="https://wiki.galaxyproject.org/Learn/Datatypes#Scf"/><datatype extension="Sequences" type="galaxy.datatypes.assembly:Sequences" display_in_upload="false"/><datatype extension="snpeffdb" type="galaxy.datatypes.text:SnpEffDb" display_in_upload="True"/>
-    <datatype extension="snpsiftdbnsfp" type="galaxy.datatypes.txt:SnpSiftDbNSFP" display_in_upload="True"/>
+    <datatype extension="snpsiftdbnsfp" type="galaxy.datatypes.text:SnpSiftDbNSFP" display_in_upload="True"/><datatype extension="dbnsfp.tabular" type="galaxy.datatypes.tabular:Tabular" subclass="True" display_in_upload="True"><converter file="tabular_to_dbnsfp.xml" target_datatype="snpsiftdbnsfp"/></datatype>
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
                            
                          
                          
                            
                            0