Mercurial > public > mercurial-scm > hg-stable
diff mercurial/wireprotov1server.py @ 52741:48572371d478
clonebundles: allow storing inline clonebundles outside .hg
author | Joerg Sonnenberger <joerg@bec.de> |
---|---|
date | Tue, 07 Jan 2025 14:05:51 +0100 |
parents | e627cc25b6f3 |
children |
line wrap: on
line diff
--- a/mercurial/wireprotov1server.py Fri Jan 31 15:04:13 2025 +0000 +++ b/mercurial/wireprotov1server.py Tue Jan 07 14:05:51 2025 +0100 @@ -279,17 +279,20 @@ clonebundlepath=path, ) - bundle_dir = repo.vfs.join(bundlecaches.BUNDLE_CACHE_DIR) - clonebundlepath = repo.vfs.join(bundle_dir, path) + bundle_root = repo.ui.config(b'server', b'peer-bundle-cache-root') + bundle_root_dir = repo.vfs.join(bundle_root) + clonebundlepath = repo.vfs.join(bundle_root, path) if not repo.vfs.exists(clonebundlepath): raise error.Abort(b'clonebundle %s does not exist' % path) - clonebundles_dir = os.path.realpath(bundle_dir) + clonebundles_dir = os.path.realpath(bundle_root_dir) + # audit invariance: absolute path of the bundle is below the bundle root if not os.path.realpath(clonebundlepath).startswith(clonebundles_dir): raise error.Abort(b'clonebundle %s is using an illegal path' % path) def generator(vfs, bundle_path): - with vfs(bundle_path) as f: + # path audited above already + with vfs(bundle_path, auditpath=False) as f: length = os.fstat(f.fileno())[6] yield util.uvarintencode(length) yield from util.filechunkiter(f)