diff --git a/lib/galaxy/webapps/tool_shed/controllers/repository.py b/lib/galaxy/webapps/tool_shed/controllers/repository.py index 2a0ab0a283a..0e55d603792 100644 --- a/lib/galaxy/webapps/tool_shed/controllers/repository.py +++ b/lib/galaxy/webapps/tool_shed/controllers/repository.py @@ -2946,13 +2946,13 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ): else: tool_shed_status_dict[ 'revision_update' ] = 'False' # Handle revision upgrades. - ordered_metadata_changeset_revisions = suc.get_ordered_metadata_changeset_revisions( repository, repo, downloadable=True ) - num_metadata_revisions = len( ordered_metadata_changeset_revisions ) - for index, metadata_changeset_revision in enumerate( ordered_metadata_changeset_revisions ): + metadata_revisions = [ revision[ 1 ] for revision in suc.get_metadata_revisions( repository, repo ) ] + num_metadata_revisions = len( metadata_revisions ) + for index, metadata_revision in enumerate( metadata_revisions ): if index == num_metadata_revisions: tool_shed_status_dict[ 'revision_upgrade' ] = 'False' break - if metadata_changeset_revision == changeset_revision: + if metadata_revision == changeset_revision: if num_metadata_revisions - index > 1: tool_shed_status_dict[ 'revision_upgrade' ] = 'True' else: diff --git a/lib/tool_shed/scripts/check_repositories_for_functional_tests.py b/lib/tool_shed/scripts/check_repositories_for_functional_tests.py index 53f968badc2..5759847d290 100644 --- a/lib/tool_shed/scripts/check_repositories_for_functional_tests.py +++ b/lib/tool_shed/scripts/check_repositories_for_functional_tests.py @@ -361,7 +361,7 @@ def should_set_do_not_test_flag( app, repository, changeset_revision, testable_r """ if not testable_revision: repo = hg_util.get_repo_for_repository( app, repository=repository, repo_path=None, create=False ) - changeset_revisions = suc.get_ordered_metadata_changeset_revisions( repository, repo, downloadable=True ) + changeset_revisions = [ revision[ 1 ] for revision in suc.get_metadata_revisions( repository, repo ) ] if len( changeset_revisions ) > 1: latest_downloadable_revision = changeset_revisions[ -1 ] if changeset_revision != latest_downloadable_revision: diff --git a/lib/tool_shed/util/metadata_util.py b/lib/tool_shed/util/metadata_util.py index a670f4a1c01..422fd4e667a 100644 --- a/lib/tool_shed/util/metadata_util.py +++ b/lib/tool_shed/util/metadata_util.py @@ -12,7 +12,7 @@ def get_latest_changeset_revision( app, repository, repo ): repository_tip ) if repository_metadata and repository_metadata.downloadable: return repository_tip - changeset_revisions = suc.get_ordered_metadata_changeset_revisions( repository, repo, downloadable=False ) + changeset_revisions = [ revision[ 1 ] for revision in suc.get_metadata_revisions( repository, repo ) ] if changeset_revisions: return changeset_revisions[ -1 ] return hg_util.INITIAL_CHANGELOG_HASH @@ -38,7 +38,7 @@ def get_previous_metadata_changeset_revision( repository, repo, before_changeset the changeset to which before_changeset_revision refers. If there isn't one, return the hash value of an empty repository changelog, hg_util.INITIAL_CHANGELOG_HASH. """ - changeset_revisions = suc.get_ordered_metadata_changeset_revisions( repository, repo, downloadable=downloadable ) + changeset_revisions = [ revision[ 1 ] for revision in suc.get_metadata_revisions( repository, repo ) ] if len( changeset_revisions ) == 1: changeset_revision = changeset_revisions[ 0 ] if changeset_revision == before_changeset_revision: diff --git a/lib/tool_shed/util/shed_util_common.py b/lib/tool_shed/util/shed_util_common.py index 82256715c98..2d93290529a 100644 --- a/lib/tool_shed/util/shed_util_common.py +++ b/lib/tool_shed/util/shed_util_common.py @@ -6,6 +6,7 @@ import shutil import socket import string from urllib2 import HTTPError +from operator import itemgetter import sqlalchemy.orm.exc from sqlalchemy import and_, false, or_, true @@ -345,7 +346,7 @@ def get_latest_downloadable_changeset_revision( app, repository, repo ): repository_metadata = get_repository_metadata_by_changeset_revision( app, app.security.encode_id( repository.id ), repository_tip ) if repository_metadata and repository_metadata.downloadable: return repository_tip - changeset_revisions = get_ordered_metadata_changeset_revisions( repository, repo, downloadable=True ) + changeset_revisions = [ revision[ 1 ] for revision in get_metadata_revisions( repository, repo ) ] if changeset_revisions: return changeset_revisions[ -1 ] return hg_util.INITIAL_CHANGELOG_HASH @@ -369,7 +370,7 @@ def get_next_downloadable_changeset_revision( repository, repo, after_changeset_ Return the installable changeset_revision in the repository changelog after the changeset to which after_changeset_revision refers. If there isn't one, return None. """ - changeset_revisions = get_ordered_metadata_changeset_revisions( repository, repo, downloadable=True ) + changeset_revisions = [ revision[ 1 ] for revision in get_metadata_revisions( repository, repo ) ] if len( changeset_revisions ) == 1: changeset_revision = changeset_revisions[ 0 ] if changeset_revision == after_changeset_revision: @@ -420,10 +421,9 @@ def get_next_prior_import_or_install_required_dict_entry( prior_required_dict, p return key -def get_ordered_metadata_changeset_revisions( repository, repo, downloadable=True ): +def get_metadata_revisions( repository, repo, sort_revisions=True, reverse=False, downloadable=True ): """ - Return an ordered list of changeset_revisions that are associated with metadata - where order is defined by the repository changelog. + Return a list of changesets for the provided repository. """ if downloadable: metadata_revisions = repository.downloadable_revisions @@ -431,16 +431,15 @@ def get_ordered_metadata_changeset_revisions( repository, repo, downloadable=Tru metadata_revisions = repository.metadata_revisions changeset_tups = [] for repository_metadata in metadata_revisions: - changeset_revision = repository_metadata.changeset_revision - ctx = hg_util.get_changectx_for_changeset( repo, changeset_revision ) + ctx = hg_util.get_changectx_for_changeset( repo, repository_metadata.changeset_revision ) if ctx: rev = '%04d' % ctx.rev() else: - rev = '-1' - changeset_tups.append( ( rev, changeset_revision ) ) - sorted_changeset_tups = sorted( changeset_tups ) - sorted_changeset_revisions = [ str( changeset_tup[ 1 ] ) for changeset_tup in sorted_changeset_tups ] - return sorted_changeset_revisions + rev = -1 + changeset_tups.append( ( rev, repository_metadata.changeset_revision ) ) + if sort_revisions: + changeset_tups.sort( key=itemgetter( 0 ), reverse=reverse ) + return changeset_tups def get_prior_import_or_install_required_dict( app, tsr_ids, repo_info_dicts ):