'Generate the metadata for the installed tool shed repository, among other things.  If the installed tool_shed_repository
contains tools that are loaded into the Galaxy tool panel, this method will automatically eliminate all entries for each
of the tools defined in the received repository_elem from all non-shed-related tool panel configuration files since the
entries are automatically added to the reserved migrated_tools_conf.xml file as part of the migration process.'

def handle_repository_contents(self, tool_shed_repository, repository_clone_url, relative_install_dir, repository_elem, install_dependencies, is_repository_dependency=False):

    tool_configs_to_filter = []
    tool_panel_dict_for_display = odict()
    if self.tool_path:
        repo_install_dir = os.path.join(self.tool_path, relative_install_dir)
    else:
        repo_install_dir = relative_install_dir
    if (not is_repository_dependency):
        for tool_elem in repository_elem:
            tool_config = tool_elem.get('file')
            guid = self.get_guid(repository_clone_url, relative_install_dir, tool_config)
            (is_displayed, tool_sections) = self.get_containing_tool_sections(tool_config)
            if is_displayed:
                tool_panel_dict_for_tool_config = self.tpm.generate_tool_panel_dict_for_tool_config(guid, tool_config, tool_sections=tool_sections)
                for (k, v) in tool_panel_dict_for_tool_config.items():
                    tool_panel_dict_for_display[k] = v
                    for tool_panel_dict in v:
                        if (tool_config not in tool_configs_to_filter):
                            tool_configs_to_filter.append(tool_config)
            else:
                log.error(('The    tool    "%s"    (%s)    has    not    been    enabled    because    it    is    not    defined    in    a    proprietary    tool    config    (%s).' % (guid, tool_config, ',    '.join((self.proprietary_tool_confs or [])))))
        if tool_configs_to_filter:
            lock = threading.Lock()
            lock.acquire(True)
            try:
                self.filter_and_persist_proprietary_tool_panel_configs(tool_configs_to_filter)
            except Exception:
                log.exception('Exception    attempting    to    filter    and    persist    non-shed-related    tool    panel    configs')
            finally:
                lock.release()
    irmm = InstalledRepositoryMetadataManager(app=self.app, tpm=self.tpm, repository=tool_shed_repository, changeset_revision=tool_shed_repository.changeset_revision, repository_clone_url=repository_clone_url, shed_config_dict=self.shed_config_dict, relative_install_dir=relative_install_dir, repository_files_dir=None, resetting_all_metadata_on_repository=False, updating_installed_repository=False, persist=True)
    irmm.generate_metadata_for_changeset_revision()
    irmm_metadata_dict = irmm.get_metadata_dict()
    tool_shed_repository.metadata = irmm_metadata_dict
    self.app.install_model.context.add(tool_shed_repository)
    self.app.install_model.context.flush()
    has_tool_dependencies = self.__has_tool_dependencies(irmm_metadata_dict)
    if has_tool_dependencies:
        tool_dependencies = tool_dependency_util.create_tool_dependency_objects(self.app, tool_shed_repository, relative_install_dir, set_status=True)
    else:
        tool_dependencies = None
    if ('tools' in irmm_metadata_dict):
        tdtm = data_table_manager.ToolDataTableManager(self.app)
        sample_files = irmm_metadata_dict.get('sample_files', [])
        sample_files = [str(s) for s in sample_files]
        tool_index_sample_files = tdtm.get_tool_index_sample_files(sample_files)
        tool_util.copy_sample_files(self.app, tool_index_sample_files, tool_path=self.tool_path)
        sample_files_copied = [s for s in tool_index_sample_files]
        repository_tools_tups = irmm.get_repository_tools_tups()
        if repository_tools_tups:
            repository_tools_tups = tdtm.handle_missing_data_table_entry(relative_install_dir, self.tool_path, repository_tools_tups)
            (repository_tools_tups, sample_files_copied) = tool_util.handle_missing_index_file(self.app, self.tool_path, sample_files, repository_tools_tups, sample_files_copied)
            tool_util.copy_sample_files(self.app, sample_files, tool_path=self.tool_path, sample_files_copied=sample_files_copied)
            if (not is_repository_dependency):
                self.tpm.add_to_tool_panel(tool_shed_repository.name, repository_clone_url, tool_shed_repository.installed_changeset_revision, repository_tools_tups, self.repository_owner, self.migrated_tools_config, tool_panel_dict=tool_panel_dict_for_display, new_install=True)
    if (install_dependencies and tool_dependencies and has_tool_dependencies):
        irm = install_manager.InstallRepositoryManager(self.app, self.tpm)
        itdm = install_manager.InstallToolDependencyManager(self.app)
        irm.update_tool_shed_repository_status(tool_shed_repository, self.app.install_model.ToolShedRepository.installation_status.INSTALLING_TOOL_DEPENDENCIES)
        tool_dependencies_config = hg_util.get_config_from_disk('tool_dependencies.xml', repo_install_dir)
        installed_tool_dependencies = itdm.install_specified_tool_dependencies(tool_shed_repository=tool_shed_repository, tool_dependencies_config=tool_dependencies_config, tool_dependencies=tool_dependencies, from_tool_migration_manager=True)
        for installed_tool_dependency in installed_tool_dependencies:
            if (installed_tool_dependency.status == self.app.install_model.ToolDependency.installation_status.ERROR):
                log.error('The    ToolMigrationManager    returned    the    following    error    while    installing    tool    dependency    %s:    %s', installed_tool_dependency.name, installed_tool_dependency.error_message)
    if ('datatypes' in irmm_metadata_dict):
        cdl = custom_datatype_manager.CustomDatatypeLoader(self.app)
        tool_shed_repository.status = self.app.install_model.ToolShedRepository.installation_status.LOADING_PROPRIETARY_DATATYPES
        if (not tool_shed_repository.includes_datatypes):
            tool_shed_repository.includes_datatypes = True
        self.app.install_model.context.add(tool_shed_repository)
        self.app.install_model.context.flush()
        work_dir = tempfile.mkdtemp(prefix='tmp-toolshed-hrc')
        datatypes_config = hg_util.get_config_from_disk(suc.DATATYPES_CONFIG_FILENAME, repo_install_dir)
        (converter_path, display_path) = cdl.alter_config_and_load_prorietary_datatypes(datatypes_config, repo_install_dir, override=False)
        if (converter_path or display_path):
            repository_dict = cdl.create_repository_dict_for_proprietary_datatypes(tool_shed=self.tool_shed_url, name=tool_shed_repository.name, owner=self.repository_owner, installed_changeset_revision=tool_shed_repository.installed_changeset_revision, tool_dicts=irmm_metadata_dict.get('tools', []), converter_path=converter_path, display_path=display_path)
        if converter_path:
            self.app.datatypes_registry.load_datatype_converters(self.toolbox, installed_repository_dict=repository_dict)
        if display_path:
            self.app.datatypes_registry.load_display_applications(self.app, installed_repository_dict=repository_dict)
        basic_util.remove_dir(work_dir)
