# HG changeset patch # User RhodeCode Admin # Date 2023-03-24 21:17:41 # Node ID ccf62cdf9a1ed4997ce01a229ae3586a623aaaaa # Parent 176bb96a18e6ff8f721812dd9310ec64df0fb6ef scm: added md5 methods to be calculated on vcsserver instead of RhodeCode side diff --git a/vcsserver/lib/rc_cache/utils.py b/vcsserver/lib/rc_cache/utils.py --- a/vcsserver/lib/rc_cache/utils.py +++ b/vcsserver/lib/rc_cache/utils.py @@ -161,11 +161,10 @@ def get_or_create_region(region_name, re from vcsserver.lib.rc_cache.backends import FileNamespaceBackend region_obj = region_meta.dogpile_cache_regions.get(region_name) if not region_obj: - raise EnvironmentError( - 'Region `{}` not in configured: {}.'.format( - region_name, list(region_meta.dogpile_cache_regions.keys()))) + reg_keys = list(region_meta.dogpile_cache_regions.keys()) + raise EnvironmentError(f'Region `{region_name}` not in configured: {reg_keys}.') - region_uid_name = '{}:{}'.format(region_name, region_namespace) + region_uid_name = f'{region_name}:{region_namespace}' if isinstance(region_obj.actual_backend, FileNamespaceBackend): region_exist = region_meta.dogpile_cache_regions.get(region_namespace) if region_exist: @@ -181,7 +180,7 @@ def get_or_create_region(region_name, re function_key_generator=backend_key_generator(region_obj.actual_backend) ) namespace_filename = os.path.join( - cache_dir, "{}.cache.dbm".format(region_namespace)) + cache_dir, f"{region_namespace}.cache.dbm") # special type that allows 1db per namespace new_region.configure( backend='dogpile.cache.rc.file_namespace', diff --git a/vcsserver/remote/git.py b/vcsserver/remote/git.py --- a/vcsserver/remote/git.py +++ b/vcsserver/remote/git.py @@ -273,6 +273,17 @@ class GitRemote(RemoteBase): return _is_binary(repo_id, tree_id) @reraise_safe_exceptions + def md5_hash(self, wire, tree_id): + cache_on, context_uid, repo_id = self._cache_on(wire) + region = self._region(wire) + + @region.conditional_cache_on_arguments(condition=cache_on) + def _md5_hash(_repo_id, _tree_id): + return '' + + return _md5_hash(repo_id, tree_id) + + @reraise_safe_exceptions def in_largefiles_store(self, wire, oid): conf = self._wire_to_config(wire) repo_init = self._factory.repo_libgit2(wire) diff --git a/vcsserver/remote/hg.py b/vcsserver/remote/hg.py --- a/vcsserver/remote/hg.py +++ b/vcsserver/remote/hg.py @@ -623,6 +623,20 @@ class HgRemote(RemoteBase): return _is_binary(repo_id, revision, path) @reraise_safe_exceptions + def md5_hash(self, wire, revision, path): + cache_on, context_uid, repo_id = self._cache_on(wire) + region = self._region(wire) + + @region.conditional_cache_on_arguments(condition=cache_on) + def _md5_hash(_repo_id, _sha, _path): + repo = self._factory.repo(wire) + ctx = self._get_ctx(repo, revision) + fctx = ctx.filectx(safe_bytes(path)) + return hashlib.md5(fctx.data()).hexdigest() + + return _md5_hash(repo_id, revision, path) + + @reraise_safe_exceptions def in_largefiles_store(self, wire, sha): repo = self._factory.repo(wire) return largefiles.lfutil.instore(repo, sha) diff --git a/vcsserver/remote/svn.py b/vcsserver/remote/svn.py --- a/vcsserver/remote/svn.py +++ b/vcsserver/remote/svn.py @@ -472,8 +472,8 @@ class SvnRemote(RemoteBase): @reraise_safe_exceptions def is_binary(self, wire, rev, path): cache_on, context_uid, repo_id = self._cache_on(wire) + region = self._region(wire) - region = self._region(wire) @region.conditional_cache_on_arguments(condition=cache_on) def _is_binary(_repo_id, _rev, _path): raw_bytes = self.get_file_content(wire, path, rev) @@ -482,6 +482,17 @@ class SvnRemote(RemoteBase): return _is_binary(repo_id, rev, path) @reraise_safe_exceptions + def md5_hash(self, wire, rev, path): + cache_on, context_uid, repo_id = self._cache_on(wire) + region = self._region(wire) + + @region.conditional_cache_on_arguments(condition=cache_on) + def _md5_hash(_repo_id, _rev, _path): + return '' + + return _md5_hash(repo_id, rev, path) + + @reraise_safe_exceptions def run_svn_command(self, wire, cmd, **opts): path = wire.get('path', None)