Skip to content

Commit

Permalink
Use hg id to map a changeset to a revision number
Browse files Browse the repository at this point in the history
This allows removing a lot of calls to `hg_util.get_repo_for_repository()`,
which uses the discouraged Mercurial API.
  • Loading branch information
nsoranzo committed Jun 8, 2018
1 parent 7c75c23 commit 4299995
Show file tree
Hide file tree
Showing 14 changed files with 72 additions and 95 deletions.
8 changes: 3 additions & 5 deletions lib/galaxy/webapps/tool_shed/api/repositories.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,8 +216,7 @@ def get_repository_revision_install_info(self, trans, name, owner, changeset_rev
if repository_metadata is None:
# The changeset_revision column in the repository_metadata table has been updated with a new
# value value, so find the changeset_revision to which we need to update.
repo = hg_util.get_repo_for_repository(self.app, repository=repository)
new_changeset_revision = metadata_util.get_next_downloadable_changeset_revision(repository, repo, changeset_revision)
new_changeset_revision = metadata_util.get_next_downloadable_changeset_revision(self.app, repository, changeset_revision)
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision(self.app,
encoded_repository_id,
new_changeset_revision)
Expand Down Expand Up @@ -800,15 +799,14 @@ def updates(self, trans, **kwd):
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision(trans.app,
trans.security.encode_id(repository.id),
changeset_revision)
repo = hg_util.get_repo_for_repository(trans.app, repository=repository)
tool_shed_status_dict = {}
# Handle repository deprecation.
tool_shed_status_dict['repository_deprecated'] = str(repository.deprecated)
# Handle latest installable revision.
if changeset_revision == repository.tip(trans.app):
tool_shed_status_dict['latest_installable_revision'] = 'True'
else:
next_installable_revision = metadata_util.get_next_downloadable_changeset_revision(repository, repo, changeset_revision)
next_installable_revision = metadata_util.get_next_downloadable_changeset_revision(trans.app, repository, changeset_revision)
if repository_metadata is None:
if next_installable_revision and next_installable_revision != changeset_revision:
tool_shed_status_dict['latest_installable_revision'] = 'True'
Expand All @@ -828,7 +826,7 @@ def updates(self, trans, **kwd):
else:
tool_shed_status_dict['revision_update'] = 'False'
# Handle revision upgrades.
metadata_revisions = [revision[1] for revision in metadata_util.get_metadata_revisions(repository, repo)]
metadata_revisions = [revision[1] for revision in metadata_util.get_metadata_revisions(trans.app, repository)]
num_metadata_revisions = len(metadata_revisions)
for index, metadata_revision in enumerate(metadata_revisions):
if index == num_metadata_revisions:
Expand Down
6 changes: 1 addition & 5 deletions lib/galaxy/webapps/tool_shed/api/repository_revisions.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from galaxy import web
from galaxy.web.base.controller import BaseAPIController, HTTPBadRequest
from tool_shed.capsule import capsule_manager
from tool_shed.util import hg_util
from tool_shed.util import metadata_util
from tool_shed.util import repository_util

Expand Down Expand Up @@ -141,10 +140,7 @@ def repository_dependencies(self, trans, id, **kwd):
if repository_dependency_repository_metadata is None:
# The changeset_revision column in the repository_metadata table has been updated with a new
# value value, so find the changeset_revision to which we need to update.
repo = hg_util.get_repo_for_repository(trans.app, repository=repository_dependency)
new_changeset_revision = metadata_util.get_next_downloadable_changeset_revision(repository_dependency,
repo,
changeset_revision)
new_changeset_revision = metadata_util.get_next_downloadable_changeset_revision(trans.app, repository_dependency, changeset_revision)
if new_changeset_revision != changeset_revision:
repository_dependency_repository_metadata = \
metadata_util.get_repository_metadata_by_changeset_revision(trans.app,
Expand Down
33 changes: 11 additions & 22 deletions lib/galaxy/webapps/tool_shed/controllers/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -1354,8 +1354,7 @@ def get_latest_downloadable_changeset_revision(self, trans, **kwd):
if repository_name is not None and repository_owner is not None:
repository = repository_util.get_repository_by_name_and_owner(trans.app, repository_name, repository_owner)
if repository:
repo = hg_util.get_repo_for_repository(trans.app, repository=repository)
return metadata_util.get_latest_downloadable_changeset_revision(trans.app, repository, repo)
return metadata_util.get_latest_downloadable_changeset_revision(trans.app, repository)
return hg_util.INITIAL_CHANGELOG_HASH

@web.json
Expand Down Expand Up @@ -1565,20 +1564,18 @@ def get_updated_repository_information(self, trans, name, owner, changeset_revis
repository = repository_util.get_repository_by_name_and_owner(trans.app, name, owner)
repository_id = trans.security.encode_id(repository.id)
repository_clone_url = common_util.generate_clone_url_for_repository_in_tool_shed(trans.user, repository)
repo = hg_util.get_repo_for_repository(trans.app, repository=repository)
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision(trans.app, repository_id, changeset_revision)
if not repository_metadata:
# The received changeset_revision is no longer associated with metadata, so get the next changeset_revision in the repository
# changelog that is associated with metadata.
changeset_revision = metadata_util.get_next_downloadable_changeset_revision(repository,
repo,
after_changeset_revision=changeset_revision)
changeset_revision = metadata_util.get_next_downloadable_changeset_revision(trans.app, repository, after_changeset_revision=changeset_revision)
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision(trans.app, repository_id, changeset_revision)
ctx = hg_util.get_changectx_for_changeset(repo, changeset_revision)
repo_path = repository.repo_path(trans.app)
ctx_rev = hg_util.changeset2rev(repo_path, changeset_revision)
repo_info_dict = repository_util.create_repo_info_dict(app=trans.app,
repository_clone_url=repository_clone_url,
changeset_revision=changeset_revision,
ctx_rev=str(ctx.rev()),
ctx_rev=ctx_rev,
repository_owner=repository.user.username,
repository_name=repository.name,
repository=repository,
Expand Down Expand Up @@ -1979,7 +1976,7 @@ def manage_repository(self, trans, id, **kwd):
# There is no repository_metadata defined for the changeset_revision, so see if it was defined in a previous
# changeset in the changelog.
previous_changeset_revision = \
metadata_util.get_previous_metadata_changeset_revision(repository, repo, changeset_revision, downloadable=False)
metadata_util.get_previous_metadata_changeset_revision(trans.app, repository, changeset_revision, downloadable=False)
if previous_changeset_revision != hg_util.INITIAL_CHANGELOG_HASH:
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision(trans.app, id, previous_changeset_revision)
if repository_metadata:
Expand Down Expand Up @@ -2078,12 +2075,8 @@ def manage_repository_admins(self, trans, id, **kwd):
else:
# There is no repository_metadata defined for the changeset_revision, so see if it was defined
# in a previous changeset in the changelog.
repo = hg_util.get_repo_for_repository(trans.app, repository=repository)
previous_changeset_revision = \
metadata_util.get_previous_metadata_changeset_revision(repository,
repo,
changeset_revision,
downloadable=False)
metadata_util.get_previous_metadata_changeset_revision(trans.app, repository, changeset_revision, downloadable=False)
if previous_changeset_revision != hg_util.INITIAL_CHANGELOG_HASH:
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision(trans.app,
id,
Expand Down Expand Up @@ -2155,9 +2148,8 @@ def next_installable_changeset_revision(self, trans, **kwd):
owner = kwd.get('owner', None)
changeset_revision = kwd.get('changeset_revision', None)
repository = repository_util.get_repository_by_name_and_owner(trans.app, name, owner)
repo = hg_util.get_repo_for_repository(trans.app, repository=repository)
# Get the next installable changeset_revision beyond the received changeset_revision.
next_changeset_revision = metadata_util.get_next_downloadable_changeset_revision(repository, repo, changeset_revision)
next_changeset_revision = metadata_util.get_next_downloadable_changeset_revision(trans.app, repository, changeset_revision)
if next_changeset_revision and next_changeset_revision != changeset_revision:
return next_changeset_revision
return ''
Expand Down Expand Up @@ -2259,10 +2251,8 @@ def previous_changeset_revisions(self, trans, from_tip=False, **kwd):
if changeset_revision is not None:
repo = hg_util.get_repo_for_repository(trans.app, repository=repository)
# Get the lower bound changeset revision.
lower_bound_changeset_revision = metadata_util.get_previous_metadata_changeset_revision(repository,
repo,
changeset_revision,
downloadable=True)
lower_bound_changeset_revision = \
metadata_util.get_previous_metadata_changeset_revision(trans.app, repository, changeset_revision, downloadable=True)
# Build the list of changeset revision hashes.
changeset_hashes = []
for changeset in hg_util.reversed_lower_upper_bounded_changelog(repo,
Expand Down Expand Up @@ -2604,8 +2594,7 @@ def sharable_repository_revision(self, trans, owner, name, changeset_revision):
changeset_revision)
if not repository_metadata:
# Get updates to the received changeset_revision if any exist.
repo = hg_util.get_repo_for_repository(trans.app, repository=repository)
upper_bound_changeset_revision = metadata_util.get_next_downloadable_changeset_revision(repository, repo, changeset_revision)
upper_bound_changeset_revision = metadata_util.get_next_downloadable_changeset_revision(trans.app, repository, changeset_revision)
if upper_bound_changeset_revision and upper_bound_changeset_revision != changeset_revision:
changeset_revision = upper_bound_changeset_revision
repository_metadata = metadata_util.get_repository_metadata_by_repository_id_changeset_revision(trans.app,
Expand Down
7 changes: 2 additions & 5 deletions lib/galaxy/webapps/tool_shed/model/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,17 +249,14 @@ def get_type_class(self, app):
return app.repository_types_registry.get_class_by_label(self.type)

def get_tool_dependencies(self, app, changeset_revision):
repo = hg_util.get_repo_for_repository(app, repository=self)
changeset_revision = metadata_util.get_next_downloadable_changeset_revision(self, repo, changeset_revision)
changeset_revision = metadata_util.get_next_downloadable_changeset_revision(app, self, changeset_revision)
for downloadable_revision in self.downloadable_revisions:
if downloadable_revision.changeset_revision == changeset_revision:
return downloadable_revision.metadata.get('tool_dependencies', {})
return {}

def installable_revisions(self, app, sort_revisions=True):
return metadata_util.get_metadata_revisions(self,
hg_util.get_repo_for_repository(app, repository=self),
sort_revisions=sort_revisions)
return metadata_util.get_metadata_revisions(app, self, sort_revisions=sort_revisions)

def is_new(self, app):
repo = hg_util.get_repo_for_repository(app, repository=self)
Expand Down
5 changes: 1 addition & 4 deletions lib/tool_shed/capsule/capsule_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,11 +587,8 @@ def get_dependent_downloadable_revisions(self, repository_metadata):
# The defined changeset_revision is not associated with a repository_metadata
# record, so updates must be necessary.
defined_repository = repository_util.get_repository_by_name_and_owner(self.app, name, owner)
defined_repo = hg_util.get_repo_for_repository(self.app, repository=defined_repository)
updated_changeset_revision = \
metadata_util.get_next_downloadable_changeset_revision(defined_repository,
defined_repo,
changeset_revision)
metadata_util.get_next_downloadable_changeset_revision(self.app, defined_repository, changeset_revision)
if updated_changeset_revision == rm_changeset_revision and updated_changeset_revision != changeset_revision:
dependent_downloadable_revisions.append(downloadable_revision)
return dependent_downloadable_revisions
Expand Down
3 changes: 1 addition & 2 deletions lib/tool_shed/dependencies/attribute_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,8 @@ def handle_elem(self, elem):
# revision to ensure that the contents of the revision are valid.
repository = repository_util.get_repository_by_name_and_owner(self.app, name, owner)
if repository:
repo = hg_util.get_repo_for_repository(self.app, repository=repository)
lastest_installable_changeset_revision = \
metadata_util.get_latest_downloadable_changeset_revision(self.app, repository, repo)
metadata_util.get_latest_downloadable_changeset_revision(self.app, repository)
if lastest_installable_changeset_revision != hg_util.INITIAL_CHANGELOG_HASH:
elem.attrib['changeset_revision'] = lastest_installable_changeset_revision
altered = True
Expand Down
11 changes: 7 additions & 4 deletions lib/tool_shed/dependencies/repository/relation_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

import tool_shed.util.repository_util
from galaxy.util import asbool, listify
from tool_shed.util import (common_util, container_util, hg_util, metadata_util,
shed_util_common as suc)
from tool_shed.util import (
common_util,
container_util,
metadata_util,
shed_util_common as suc
)

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -195,8 +199,7 @@ def get_updated_changeset_revisions_for_repository_dependencies(self, key_rd_dic
updated_key_rd_dicts.append(key_rd_dict)
else:
# The repository changeset_revision is no longer installable, so see if there's been an update.
repo = hg_util.get_repo_for_repository(self.app, repository=repository)
changeset_revision = metadata_util.get_next_downloadable_changeset_revision(repository, repo, rd_changeset_revision)
changeset_revision = metadata_util.get_next_downloadable_changeset_revision(self.app, repository, rd_changeset_revision)
if changeset_revision != rd_changeset_revision:
repository_metadata = \
metadata_util.get_repository_metadata_by_repository_id_changeset_revision(self.app,
Expand Down
5 changes: 1 addition & 4 deletions lib/tool_shed/grids/repository_grids.py
Original file line number Diff line number Diff line change
Expand Up @@ -1010,11 +1010,8 @@ def get_value(self, trans, grid, repository_metadata):
required_repository_id,
changeset_revision)
if not required_repository_metadata:
repo = hg_util.get_repo_for_repository(trans.app, repository=required_repository)
updated_changeset_revision = \
metadata_util.get_next_downloadable_changeset_revision(required_repository,
repo,
changeset_revision)
metadata_util.get_next_downloadable_changeset_revision(trans.app, required_repository, changeset_revision)
required_repository_metadata = \
metadata_util.get_repository_metadata_by_repository_id_changeset_revision(trans.app,
required_repository_id,
Expand Down

0 comments on commit 4299995

Please sign in to comment.