mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge pull request #21617 from mvdbeek/fix-toolshed-tests
Fix toolshed tests on Python 3.14
This commit is contained in:
@@ -170,7 +170,8 @@ markdown-it-py==4.0.0 ; python_full_version >= '3.11'
|
||||
markupsafe==3.0.3
|
||||
mcp==1.25.0 ; python_full_version >= '3.10'
|
||||
mdurl==0.1.2
|
||||
mercurial==7.1.2
|
||||
mercurial==7.1.2 ; python_version < '3.14'
|
||||
mercurial==7.2rc0 ; python_version >= '3.14'
|
||||
mistralai==1.9.11
|
||||
mistune==3.1.4
|
||||
more-itertools==10.8.0
|
||||
|
||||
@@ -392,7 +392,9 @@ class BaseMetadataGenerator:
|
||||
if invalid_tool_configs:
|
||||
metadata_dict["invalid_tools"] = invalid_tool_configs
|
||||
self.metadata_dict = metadata_dict
|
||||
remove_dir(work_dir)
|
||||
# Only remove work_dir if not resetting all metadata - in that case the caller handles cleanup
|
||||
if not self.resetting_all_metadata_on_repository:
|
||||
remove_dir(work_dir)
|
||||
|
||||
def generate_package_dependency_metadata(self, elem, valid_tool_dependencies_dict, invalid_tool_dependencies_dict):
|
||||
"""
|
||||
|
||||
@@ -799,14 +799,24 @@ class RepositoryMetadataManager(ToolShedMetadataGenerator):
|
||||
metadata_dict = None
|
||||
ancestor_changeset_revision = None
|
||||
ancestor_metadata_dict = None
|
||||
for changeset in self.repository.get_changesets_for_setting_metadata(self.app):
|
||||
work_dir = tempfile.mkdtemp(prefix="tmp-toolshed-ramorits")
|
||||
ctx = repo[changeset]
|
||||
log.debug("Cloning repository changeset revision: %s", str(ctx.rev()))
|
||||
assert self.repository_clone_url
|
||||
repository_clone_url = repository_clone_url or self.repository_clone_url
|
||||
cloned_ok, error_message = hg_util.clone_repository(repository_clone_url, work_dir, str(ctx.rev()))
|
||||
if cloned_ok:
|
||||
|
||||
# Clone repository once, then update for each changeset revision.
|
||||
work_dir = tempfile.mkdtemp(prefix="tmp-toolshed-ramorits")
|
||||
assert self.repository_clone_url
|
||||
repository_clone_url = repository_clone_url or self.repository_clone_url
|
||||
log.debug("Cloning repository for metadata reset")
|
||||
cloned_ok, error_message = hg_util.clone_repository(repository_clone_url, work_dir)
|
||||
if not cloned_ok:
|
||||
log.error(f"Failed to clone repository: {error_message}")
|
||||
basic_util.remove_dir(work_dir)
|
||||
self._clean_repository_metadata(changeset_revisions)
|
||||
return
|
||||
|
||||
try:
|
||||
for changeset in self.repository.get_changesets_for_setting_metadata(self.app):
|
||||
ctx = repo[changeset]
|
||||
log.debug("Updating to changeset revision: %s", str(ctx.rev()))
|
||||
hg_util.update_repository(work_dir, str(ctx.rev()))
|
||||
log.debug("Generating metadata for changeset revision: %s", str(ctx.rev()))
|
||||
self.set_changeset_revision(str(ctx))
|
||||
self.set_repository_files_dir(work_dir)
|
||||
@@ -823,11 +833,11 @@ class RepositoryMetadataManager(ToolShedMetadataGenerator):
|
||||
# self.SUBSET - ancestor metadata is a subset of current metadata, so continue from current
|
||||
# self.NOT_EQUAL_AND_NOT_SUBSET - ancestor metadata is neither equal to nor a subset of current
|
||||
# metadata, so persist ancestor metadata.
|
||||
log.info(f"amd {ancestor_metadata_dict}")
|
||||
log.debug(f"amd {ancestor_metadata_dict}")
|
||||
comparison = self.compare_changeset_revisions(
|
||||
ancestor_changeset_revision, ancestor_metadata_dict
|
||||
)
|
||||
log.info(f"comparison {comparison}")
|
||||
log.debug(f"comparison {comparison}")
|
||||
if comparison in [self.NO_METADATA, self.EQUAL, self.SUBSET]:
|
||||
ancestor_changeset_revision = self.changeset_revision
|
||||
ancestor_metadata_dict = self.metadata_dict
|
||||
@@ -858,6 +868,7 @@ class RepositoryMetadataManager(ToolShedMetadataGenerator):
|
||||
changeset_revisions.append(metadata_changeset_revision)
|
||||
ancestor_changeset_revision = None
|
||||
ancestor_metadata_dict = None
|
||||
finally:
|
||||
basic_util.remove_dir(work_dir)
|
||||
# Delete all repository_metadata records for this repository that do not have a changeset_revision
|
||||
# value in changeset_revisions.
|
||||
|
||||
@@ -4,10 +4,9 @@ import os
|
||||
import string
|
||||
import tempfile
|
||||
from datetime import date
|
||||
from typing import Any
|
||||
|
||||
from mercurial import (
|
||||
cmdutil,
|
||||
commands,
|
||||
mdiff,
|
||||
patch,
|
||||
)
|
||||
@@ -74,15 +73,15 @@ malicious_error = " This changeset cannot be downloaded because it potentially
|
||||
malicious_error_can_push = " Correct this changeset as soon as possible, it potentially produces malicious behavior or contains inappropriate content."
|
||||
|
||||
|
||||
def get_mercurial_default_options_dict(command):
|
||||
"""Borrowed from repoman - get default parameters for a mercurial command."""
|
||||
possible = cmdutil.findpossible(command, commands.table)
|
||||
# Mercurial >= 3.4 returns a tuple whose first element is the old return dict
|
||||
if type(possible) is tuple:
|
||||
possible = possible[0]
|
||||
if len(possible) != 1:
|
||||
raise Exception(f'unable to find mercurial command "{command}"')
|
||||
return {r[1].replace(b"-", b"_"): r[2] for r in next(iter(possible.values()))[1][1]}
|
||||
def get_mercurial_default_options_dict(command: str) -> dict[str, Any]:
|
||||
"""Get default parameters for a mercurial command."""
|
||||
# Use mdiff.diffopts defaults directly instead of introspecting command table
|
||||
# (the old cmdutil.findpossible API was removed in Mercurial 7.2)
|
||||
if command == "diff":
|
||||
# Convert byte keys to strings but preserve value types (int, bool)
|
||||
# as mdiff.diffopts expects properly typed values
|
||||
return {(k.decode("utf-8") if isinstance(k, bytes) else k): v for k, v in mdiff.diffopts.defaults.items()}
|
||||
raise Exception(f'unable to find mercurial command "{command}"')
|
||||
|
||||
|
||||
class RepositoryController(BaseUIController, ratings_util.ItemRatings):
|
||||
@@ -2366,10 +2365,8 @@ class RepositoryController(BaseUIController, ratings_util.ItemRatings):
|
||||
else:
|
||||
ctx_child = None
|
||||
diffs = []
|
||||
options_dict = get_mercurial_default_options_dict(b"diff")
|
||||
# Not quite sure if the following settings make any difference, but with a combination of them and the size check on each
|
||||
# diff, we don't run out of memory when viewing the changelog of the cisortho2 repository on the test tool shed.
|
||||
options_dict = {util.unicodify(k): util.unicodify(v) for k, v in options_dict.items()}
|
||||
# Get default diff options with string keys and properly typed values
|
||||
options_dict = get_mercurial_default_options_dict("diff")
|
||||
options_dict["maxfile"] = basic_util.MAXDIFFSIZE
|
||||
options_dict["maxtotal"] = basic_util.MAXDIFFSIZE
|
||||
diffopts = mdiff.diffopts(**options_dict)
|
||||
|
||||
+2
-1
@@ -57,7 +57,8 @@ dependencies = [
|
||||
"Mako",
|
||||
"Markdown",
|
||||
"MarkupSafe",
|
||||
"mercurial>=6.8.2", # Python 3.13 support
|
||||
"mercurial>=6.8.2 ; python_version<'3.14'", # Python 3.13 support
|
||||
"mercurial>=7.2rc0 ; python_version>='3.14'", # Python 3.14 support
|
||||
"mrcfile",
|
||||
"more-itertools",
|
||||
"msal",
|
||||
|
||||
Reference in New Issue
Block a user