diff --git a/lib/galaxy/config/sample/tool_shed.yml.sample b/lib/galaxy/config/sample/tool_shed.yml.sample index af9726e851ba..bf16f6bfabab 100644 --- a/lib/galaxy/config/sample/tool_shed.yml.sample +++ b/lib/galaxy/config/sample/tool_shed.yml.sample @@ -15,6 +15,10 @@ tool_shed: # installation directory. #hgweb_config_dir: null + # Default URL prefix for repositories served via hgweb. If running an + # external hgweb server you should set this to an empty string. + #hgweb_repo_prefix: repos/ + # Allow pushing directly to mercurial repositories directly and # without authentication. #config_hg_for_dev: null diff --git a/lib/galaxy/config/schemas/tool_shed_config_schema.yml b/lib/galaxy/config/schemas/tool_shed_config_schema.yml index 780d35afe05f..42ea164d9d5f 100644 --- a/lib/galaxy/config/schemas/tool_shed_config_schema.yml +++ b/lib/galaxy/config/schemas/tool_shed_config_schema.yml @@ -31,6 +31,14 @@ mapping: Where the hgweb.config file is stored. The default is the Galaxy installation directory. + hgweb_repo_prefix: + type: str + required: false + default: repos/ + desc: | + Default URL prefix for repositories served via hgweb. + If running an external hgweb server you should set this to an empty string. + config_hg_for_dev: type: str required: false diff --git a/lib/tool_shed/util/hgweb_config.py b/lib/tool_shed/util/hgweb_config.py index f39d9abcc3d3..8c1656406b0f 100644 --- a/lib/tool_shed/util/hgweb_config.py +++ b/lib/tool_shed/util/hgweb_config.py @@ -19,11 +19,11 @@ class HgWebConfigManager: def __init__(self): self.hgweb_config_dir = None self.in_memory_config = None + self.lock = threading.Lock() def add_entry(self, lhs, rhs): """Add an entry in the hgweb.config file for a new repository.""" - lock = threading.Lock() - lock.acquire(True) + self.lock.acquire(True) try: # Since we're changing the config, make sure the latest is loaded into memory. self.read_config(force_read=True) @@ -38,12 +38,11 @@ def add_entry(self, lhs, rhs): except Exception as e: log.debug("Exception in HgWebConfigManager.add_entry(): %s", unicodify(e)) finally: - lock.release() + self.lock.release() def change_entry(self, old_lhs, new_lhs, new_rhs): """Change an entry in the hgweb.config file for a repository - this only happens when the owner changes the name of the repository.""" - lock = threading.Lock() - lock.acquire(True) + self.lock.acquire(True) try: self.make_backup() # Remove the old entry. @@ -55,7 +54,7 @@ def change_entry(self, old_lhs, new_lhs, new_rhs): except Exception as e: log.debug("Exception in HgWebConfigManager.change_entry(): %s", unicodify(e)) finally: - lock.release() + self.lock.release() def get_entry(self, lhs): """Return an entry in the hgweb.config file for a repository""" diff --git a/lib/tool_shed/util/repository_util.py b/lib/tool_shed/util/repository_util.py index ea8b33d0e372..4acfd2bb7330 100644 --- a/lib/tool_shed/util/repository_util.py +++ b/lib/tool_shed/util/repository_util.py @@ -228,7 +228,7 @@ def create_repository( # Create the local repository. init_repository(repo_path=repository_path) # Add an entry in the hgweb.config file for the local repository. - lhs = f"repos/{repository.user.username}/{repository.name}" + lhs = f"{app.config.hgweb_repo_prefix}{repository.user.username}/{repository.name}" app.hgweb_config_manager.add_entry(lhs, repository_path) # Create a .hg/hgrc file for the local repository. create_hgrc_file(app, repository)