Fix for installing a repository from the tool shed that includes a repository dependency defintion where the required repository is owned by a user other than the dependent repository.

This commit is contained in:
Greg Von Kuster
2013-02-18 15:28:06 -05:00
parent 8bb285ada1
commit a53a3250dd
3 changed files with 20 additions and 7 deletions
+5 -1
View File
@@ -720,7 +720,11 @@ def get_installed_and_missing_repository_dependencies_for_new_install( trans, re
for rd_tup in rd_tups:
tool_shed, name, owner, changeset_revision = rd_tup
# Updates to installed repository revisions may have occurred, so make sure to locate the appropriate repository revision if one exists.
repository, current_changeset_revision = repository_was_previously_installed( trans, tool_shed, name, repo_info_tuple )
# We need to create a temporary repo_info_tuple that includes the correct repository owner which we get from the current rd_tup. The current
# tuple looks like: ( description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, installed_td )
tmp_clone_url = suc.generate_clone_url_from_repo_info_tup( rd_tup )
tmp_repo_info_tuple = ( None, tmp_clone_url, changeset_revision, None, owner, None, None )
repository, current_changeset_revision = repository_was_previously_installed( trans, tool_shed, name, tmp_repo_info_tuple )
if repository:
new_rd_tup = [ tool_shed, name, owner, changeset_revision, repository.id, repository.status ]
if repository.status == trans.model.ToolShedRepository.installation_status.INSTALLED:
+6
View File
@@ -1068,6 +1068,12 @@ def generate_clone_url_for_repository_in_tool_shed( trans, repository ):
return '%s://%s%s/repos/%s/%s' % ( protocol, username, base, repository.user.username, repository.name )
else:
return '%s/repos/%s/%s' % ( base_url, repository.user.username, repository.name )
def generate_clone_url_from_repo_info_tup( repo_info_tup ):
"""Generate teh URL for cloning a repositoyr given a tuple of toolshed, name, owner, changeset_revision."""
# Example tuple: ['http://localhost:9009', 'blast_datatypes', 'test', '461a4216e8ab']
toolshed, name, owner, changeset_revision = repo_info_tup
# Don't include the changeset_revision in clone urls.
return url_join( toolshed, 'repos', owner, name )
def generate_data_manager_metadata( app, repository, repo_dir, data_manager_config_filename, metadata_dict, shed_config_dict=None ):
"""Update the received metadata_dict with information from the parsed data_manager_config_filename."""
if data_manager_config_filename is None:
@@ -1472,12 +1472,15 @@ class RepositoryController( BaseUIController, common_util.ItemRatings ):
repository_clone_url = suc.generate_clone_url_for_repository_in_tool_shed( trans, repository )
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans, repository_id, changeset_revision )
metadata = repository_metadata.metadata
if not includes_tools and 'tools' in metadata:
includes_tools = True
if not has_repository_dependencies and 'repository_dependencies' in metadata:
has_repository_dependencies = True
if not includes_tool_dependencies and 'tool_dependencies' in metadata:
includes_tool_dependencies = True
if not includes_tools:
if 'tools' in metadata:
includes_tools = True
if not has_repository_dependencies:
if 'repository_dependencies' in metadata:
has_repository_dependencies = True
if not includes_tool_dependencies:
if 'tool_dependencies' in metadata:
includes_tool_dependencies = True
repo_dir = repository.repo_path( trans.app )
repo = hg.repository( suc.get_configured_ui(), repo_dir )
ctx = suc.get_changectx_for_changeset( repo, changeset_revision )