clonebundle: add a `filter_bundle_url` function
authorPierre-Yves David <pierre-yves.david@octobus.net>
Fri, 26 May 2023 17:41:25 +0200
changeset 50545 dc201a09e82c
parent 50544 e6948aafda6f
child 50546 2f5270af57c7
clonebundle: add a `filter_bundle_url` function This function does nothing by default, but give extension the opportunity to alter the URL, typically, this could be used to inject authentication token when serving clone bundle for private repositories.
mercurial/bundlecaches.py
--- a/mercurial/bundlecaches.py	Fri May 26 16:55:52 2023 +0200
+++ b/mercurial/bundlecaches.py	Fri May 26 17:41:25 2023 +0200
@@ -25,8 +25,29 @@
 
 CB_MANIFEST_FILE = b'clonebundles.manifest'
 
+
 def get_manifest(repo):
-    return repo.vfs.tryread(CB_MANIFEST_FILE)
+    """get the bundle manifest to be served to a client from a server"""
+    raw_text = repo.vfs.tryread(CB_MANIFEST_FILE)
+    entries = [e.split(b' ', 1) for e in raw_text.splitlines()]
+
+    new_lines = []
+    for e in entries:
+        url = alter_bundle_url(repo, e[0])
+        if len(e) == 1:
+            line = url + b'\n'
+        else:
+            line = b"%s %s\n" % (url, e[1])
+        new_lines.append(line)
+    return b''.join(new_lines)
+
+
+def alter_bundle_url(repo, url):
+    """a function that exist to help extension and hosting to alter the url
+
+    This will typically be used to inject authentication information in the url
+    of cached bundles."""
+    return url
 
 
 @attr.s