mirror of
https://gerrit.googlesource.com/git-repo
synced 2026-07-16 05:36:59 +00:00
sync: Support pluggable remote helpers for smart sync manifest server.
Introduce support for pluggable remote helpers (declared via the optional 'helper' attribute in <manifest-server>) to dynamically resolve proxy addresses. Route the XML-RPC manifest server connection through the resolved proxy. Bug: b/517477903 Change-Id: I3b6b8ea2640bb077521df4b4a9e8a34a8c6ecdad Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/591642 Tested-by: Rahul Yadav <yadavrah@google.com> Commit-Queue: Rahul Yadav <yadavrah@google.com> Reviewed-by: Gavin Mak <gavinmak@google.com>
This commit is contained in:
committed by
gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com
parent
cd307a6089
commit
39c0b60900
@@ -58,6 +58,7 @@ following DTD:
|
||||
|
||||
<!ELEMENT manifest-server EMPTY>
|
||||
<!ATTLIST manifest-server url CDATA #REQUIRED>
|
||||
<!ATTLIST manifest-server helper CDATA #IMPLIED>
|
||||
|
||||
<!ELEMENT submanifest EMPTY>
|
||||
<!ATTLIST submanifest name ID #REQUIRED>
|
||||
@@ -239,6 +240,11 @@ XML RPC service.
|
||||
|
||||
See the [smart sync documentation](./smart-sync.md) for more details.
|
||||
|
||||
Attribute `url`: The URL of the manifest server.
|
||||
|
||||
Attribute `helper`: Optional name of a remote helper binary to execute to
|
||||
resolve proxying or authentication for the manifest server.
|
||||
|
||||
|
||||
### Element submanifest
|
||||
|
||||
|
||||
+32
-1
@@ -27,13 +27,44 @@ the [`<manifest-server>` element](manifest-format.md#Element-manifest_server)
|
||||
element. This is how the client knows what service to talk to.
|
||||
|
||||
```xml
|
||||
<manifest-server url="https://example.com/your/manifest/server/url" />
|
||||
<manifest-server url="https://example.com/your/manifest/server/url"
|
||||
helper="repo-remote-helper-name" />
|
||||
```
|
||||
|
||||
If the URL starts with `persistent-`, then the
|
||||
[`git-remote-persistent-https` helper](https://github.com/git/git/blob/HEAD/contrib/persistent-https/README)
|
||||
is used to communicate with the server.
|
||||
|
||||
### Pluggable Remote Helpers
|
||||
|
||||
For custom proxying or authentication, Repo supports pluggable remote helpers.
|
||||
You can declare a helper binary via the optional `helper` attribute on the
|
||||
`<manifest-server>` element.
|
||||
|
||||
If the `helper` attribute is present in `<manifest-server>`:
|
||||
1. Repo searches your system `PATH` for the specified helper binary (e.g.,
|
||||
`repo-remote-sso`). If the helper cannot be found in `PATH`, Repo will raise
|
||||
a `SmartSyncError` and abort the sync.
|
||||
2. The helper is executed with the manifest server URL as its first argument:
|
||||
```bash
|
||||
<helper-binary-name> <url>
|
||||
```
|
||||
3. The helper must output a single-line JSON object on stdout and exit:
|
||||
* On success, return `status: "ok"` and a loopback proxy URL (including
|
||||
scheme, e.g., `http://127.0.0.1:999`):
|
||||
```json
|
||||
{"status": "ok", "message": "http://127.0.0.1:999"}
|
||||
```
|
||||
* On failure, return `status: "error"` and a detailed error message:
|
||||
```json
|
||||
{"status": "error", "message": "unauthorized"}
|
||||
```
|
||||
4. Repo routes the XML-RPC request through the returned proxy address.
|
||||
|
||||
**Timeout Constraint**: The remote helper must complete and exit within 10
|
||||
seconds. If it hangs or exceeds this limit, Repo will force-terminate (`kill`)
|
||||
the process and abort the synchronization.
|
||||
|
||||
## Credentials
|
||||
|
||||
Credentials may be specified directly in typical `username:password`
|
||||
|
||||
Reference in New Issue
Block a user