@foss.global/gitmanager 0.7.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +19 -0
- package/dist_rust/rustgitmanager_linux_amd64 +0 -0
- package/dist_rust/rustgitmanager_linux_arm64 +0 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.gitmanager.d.ts +3 -1
- package/dist_ts/classes.gitmanager.js +20 -1
- package/dist_ts/models.d.ts +27 -0
- package/dist_ts/rust-gitmanager-bridge.d.ts +3 -1
- package/dist_ts/rust-gitmanager-bridge.js +7 -1
- package/package.json +1 -1
- package/readme.md +39 -4
- package/thirdparty.md +8 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.gitmanager.ts +29 -0
- package/ts/models.ts +39 -0
- package/ts/rust-gitmanager-bridge.ts +21 -0
package/changelog.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-07-20 - 1.1.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- add exact-commit repository source archives (repository-archives)
|
|
8
|
+
- Generate deterministic gzip archives only from canonical full commit object IDs.
|
|
9
|
+
- Enforce configurable output limits, SHA-256 content identity, private transfer permissions, atomic finalization, and partial-file cleanup.
|
|
10
|
+
- Expose the archive operation through the TypeScript facade and Rust IPC bridge with integration coverage.
|
|
11
|
+
|
|
12
|
+
## 2026-07-20 - 1.0.0
|
|
13
|
+
|
|
14
|
+
### Breaking Changes
|
|
15
|
+
|
|
16
|
+
- enforce revision-fenced protected refs for receive-pack (smart-http)
|
|
17
|
+
- Add a TypeScript and IPC API to apply canonical protected-head rules with revision fencing, idempotency, stale detection, and SHA-256 rule digests.
|
|
18
|
+
- Run receive-pack through a managed pre-receive hook that rejects protected branch creates, deletes, and non-fast-forward updates unless explicitly allowed.
|
|
19
|
+
- Require each repository to have an explicit protected-ref policy snapshot before Smart HTTP pushes are admitted, including after restart.
|
|
20
|
+
- Add coverage for policy initialization, protected ref enforcement, self-test hardening, and restart replay.
|
|
21
|
+
|
|
3
22
|
## 2026-07-20 - 0.7.0
|
|
4
23
|
|
|
5
24
|
### Features
|
|
Binary file
|
|
Binary file
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@foss.global/gitmanager',
|
|
6
|
-
version: '
|
|
6
|
+
version: '1.1.0',
|
|
7
7
|
description: 'Headless Git manager for the foss.global Git platform, with a TypeScript API and Rust engine.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLCtGQUErRjtDQUM3RyxDQUFBIn0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryBundle, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerRestoreBundleRequest, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IGitManagerOptions } from './models.js';
|
|
2
|
+
import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerProtectedRefsApplyResult, IGitManagerSmartHttpRepositoryProtectedRefs, IGitManagerRepositoryBundle, IGitManagerRepositoryArchive, IGitManagerRepositoryArchiveRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerRestoreBundleRequest, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IGitManagerOptions } from './models.js';
|
|
3
3
|
export declare class GitManager extends plugins.EventEmitter {
|
|
4
4
|
private bridge;
|
|
5
5
|
private started;
|
|
@@ -12,12 +12,14 @@ export declare class GitManager extends plugins.EventEmitter {
|
|
|
12
12
|
getStatus(): Promise<IGitManagerStatus>;
|
|
13
13
|
setSmartHttpRepositoryAccess(accessArg: IGitManagerSmartHttpRepositoryAccess): Promise<void>;
|
|
14
14
|
setSmartHttpRepositoryVisibility(visibilityArg: IGitManagerSmartHttpRepositoryVisibility): Promise<void>;
|
|
15
|
+
setSmartHttpRepositoryProtectedRefs(protectedRefsArg: IGitManagerSmartHttpRepositoryProtectedRefs): Promise<IGitManagerProtectedRefsApplyResult>;
|
|
15
16
|
get running(): boolean;
|
|
16
17
|
initBareRepository(requestArg: IGitManagerInitBareRepositoryRequest): Promise<IGitManagerRepositoryInfo>;
|
|
17
18
|
importMirror(requestArg: IGitManagerImportMirrorRequest): Promise<IGitManagerRepositoryInfo>;
|
|
18
19
|
refreshMirror(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
|
|
19
20
|
verifyRepository(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
|
|
20
21
|
createRepositoryBundle(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryBundle>;
|
|
22
|
+
createRepositoryArchive(requestArg: IGitManagerRepositoryArchiveRequest): Promise<IGitManagerRepositoryArchive>;
|
|
21
23
|
restoreRepositoryBundle(requestArg: IGitManagerRestoreBundleRequest): Promise<IGitManagerRepositoryInfo>;
|
|
22
24
|
listRepositories(): Promise<IGitManagerRepositoryInfo[]>;
|
|
23
25
|
listRefs(requestArg: IGitManagerRefRequest): Promise<IGitManagerRef[]>;
|
|
@@ -14,6 +14,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
14
14
|
dataDir,
|
|
15
15
|
transferDir: optionsArg.transferDir ?? plugins.path.join(dataDir, 'transfers'),
|
|
16
16
|
maxBundleBytes: optionsArg.maxBundleBytes ?? 8 * 1024 * 1024 * 1024,
|
|
17
|
+
maxArchiveBytes: optionsArg.maxArchiveBytes ?? 128 * 1024 * 1024,
|
|
17
18
|
smartHttp: smartHttpOptions && smartHttpOptions.enabled !== false
|
|
18
19
|
? {
|
|
19
20
|
bindAddress: smartHttpOptions.bindAddress ?? '127.0.0.1',
|
|
@@ -118,6 +119,20 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
118
119
|
revision: visibilityArg.revision,
|
|
119
120
|
});
|
|
120
121
|
}
|
|
122
|
+
async setSmartHttpRepositoryProtectedRefs(protectedRefsArg) {
|
|
123
|
+
this.assertRunning();
|
|
124
|
+
return this.bridge.setSmartHttpRepositoryProtectedRefs({
|
|
125
|
+
org: protectedRefsArg.org,
|
|
126
|
+
repo: protectedRefsArg.repo,
|
|
127
|
+
revision: protectedRefsArg.revision,
|
|
128
|
+
rules: protectedRefsArg.rules.map((rule) => ({
|
|
129
|
+
refName: rule.refName,
|
|
130
|
+
allowCreates: rule.allowCreates,
|
|
131
|
+
allowDeletes: rule.allowDeletes,
|
|
132
|
+
allowForcePushes: rule.allowForcePushes,
|
|
133
|
+
})),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
121
136
|
get running() {
|
|
122
137
|
return this.started && this.bridge.running;
|
|
123
138
|
}
|
|
@@ -141,6 +156,10 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
141
156
|
this.assertRunning();
|
|
142
157
|
return this.bridge.createRepositoryBundle(requestArg);
|
|
143
158
|
}
|
|
159
|
+
async createRepositoryArchive(requestArg) {
|
|
160
|
+
this.assertRunning();
|
|
161
|
+
return this.bridge.createRepositoryArchive(requestArg);
|
|
162
|
+
}
|
|
144
163
|
async restoreRepositoryBundle(requestArg) {
|
|
145
164
|
this.assertRunning();
|
|
146
165
|
return this.bridge.restoreRepositoryBundle(requestArg);
|
|
@@ -216,4 +235,4 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
216
235
|
}
|
|
217
236
|
}
|
|
218
237
|
}
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5naXRtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBNkJ4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRSxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU8sQ0FBQyxZQUFZO0lBT2xELFlBQVksYUFBaUMsRUFBRTtRQUM3QyxLQUFLLEVBQUUsQ0FBQztRQVBGLFdBQU0sR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixpQkFBWSxHQUF5QixJQUFJLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLNUIsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU87ZUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRSxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLE9BQU87WUFDUCxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDO1lBQzlFLGNBQWMsRUFBRSxVQUFVLENBQUMsY0FBYyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUk7WUFDbkUsU0FBUyxFQUFFLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLE9BQU8sS0FBSyxLQUFLO2dCQUMvRCxDQUFDLENBQUM7b0JBQ0UsV0FBVyxFQUFFLGdCQUFnQixDQUFDLFdBQVcsSUFBSSxXQUFXO29CQUN4RCxJQUFJLEVBQUUsZ0JB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
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5naXRtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBaUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRSxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU8sQ0FBQyxZQUFZO0lBT2xELFlBQVksYUFBaUMsRUFBRTtRQUM3QyxLQUFLLEVBQUUsQ0FBQztRQVBGLFdBQU0sR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixpQkFBWSxHQUF5QixJQUFJLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLNUIsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU87ZUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRSxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLE9BQU87WUFDUCxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDO1lBQzlFLGNBQWMsRUFBRSxVQUFVLENBQUMsY0FBYyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUk7WUFDbkUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJO1lBQ2hFLFNBQVMsRUFBRSxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEtBQUssS0FBSztnQkFDL0QsQ0FBQyxDQUFDO29CQUNFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXLElBQUksV0FBVztvQkFDeEQsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDO29CQUNoQyxzQkFBc0IsRUFBRSxnQkFBZ0IsQ0FBQyxzQkFBc0IsSUFBSSxLQUFLO29CQUN4RSxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQyxvQkFBb0IsSUFBSSxLQUFLO29CQUNwRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQzlFLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRzt3QkFDbkIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO3FCQUN0QixDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNULHNCQUFzQixFQUFFLGdCQUFnQixDQUFDLHNCQUFzQixJQUFJLEVBQUU7b0JBQ3JFLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLG1CQUFtQixJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSTtvQkFDN0UscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUMscUJBQXFCLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJO29CQUNoRixnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJO29CQUM3RSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7b0JBQ3JFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLGtCQUFrQixJQUFJLEdBQUc7b0JBQzlELGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLGtCQUFrQixJQUFJLE1BQU07b0JBQ2pFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXOzJCQUNwQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxLQUFLLEtBQUs7d0JBQ2pELENBQUMsQ0FBQzs0QkFDRSxtQkFBbUIsRUFDakIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLG1CQUFtQjt5QkFDbkQ7d0JBQ0gsQ0FBQyxDQUFDLFNBQVM7b0JBQ2IsV0FBVyxFQUFFLGdCQUFnQixDQUFDLFdBQVc7MkJBQ3BDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLEtBQUssS0FBSzt3QkFDakQsQ0FBQyxDQUFDOzRCQUNFLG1CQUFtQixFQUNqQixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsbUJBQW1COzRCQUNsRCxtQkFBbUIsRUFDakIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLG1CQUFtQjttQ0FDN0MsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSTt5QkFDNUI7d0JBQ0gsQ0FBQyxDQUFDLFNBQVM7aUJBQ2Q7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBbUIsRUFBRSxNQUFxQixFQUFFLEVBQUU7WUFDcEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMxQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckMsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztnQkFDNUIsUUFBUSxFQUFFLENBQUM7YUFDWixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU0sS0FBSyxDQUFDLDRCQUE0QixDQUN2QyxTQUErQztRQUUvQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDO1lBQzlDLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxvQkFBb0I7WUFDcEQsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdEUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHO2dCQUNuQixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7YUFDdEIsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FDM0MsYUFBdUQ7UUFFdkQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQztZQUNsRCxHQUFHLEVBQUUsYUFBYSxDQUFDLEdBQUc7WUFDdEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1lBQ3hCLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtZQUM1QixRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVE7U0FDakMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQ0FBbUMsQ0FDOUMsZ0JBQTZEO1FBRTdELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsbUNBQW1DLENBQUM7WUFDckQsR0FBRyxFQUFFLGdCQUFnQixDQUFDLEdBQUc7WUFDekIsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUk7WUFDM0IsUUFBUSxFQUFFLGdCQUFnQixDQUFDLFFBQVE7WUFDbkMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUMvQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQy9CLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7YUFDeEMsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDN0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxVQUFnRDtRQUM5RSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQTBDO1FBQ2xFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQXlDO1FBQ2xFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBeUM7UUFDckUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sS0FBSyxDQUFDLHNCQUFzQixDQUNqQyxVQUF5QztRQUV6QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTSxLQUFLLENBQUMsdUJBQXVCLENBQ2xDLFVBQStDO1FBRS9DLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLEtBQUssQ0FBQyx1QkFBdUIsQ0FDbEMsVUFBMkM7UUFFM0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQjtRQUMzQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBaUM7UUFDckQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBa0M7UUFDdEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBc0M7UUFDMUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBeUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBb0M7UUFDekQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBa0M7UUFDckQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBc0M7UUFDMUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBaUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckMsQ0FBQzt3QkFBUyxDQUFDO29CQUNULElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
package/dist_ts/models.d.ts
CHANGED
|
@@ -33,10 +33,35 @@ export interface IGitManagerSmartHttpRepositoryVisibility extends IGitManagerRep
|
|
|
33
33
|
public: boolean;
|
|
34
34
|
revision: number;
|
|
35
35
|
}
|
|
36
|
+
export interface IGitManagerProtectedRefRule {
|
|
37
|
+
refName: string;
|
|
38
|
+
allowCreates: boolean;
|
|
39
|
+
allowDeletes: boolean;
|
|
40
|
+
allowForcePushes: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface IGitManagerSmartHttpRepositoryProtectedRefs extends IGitManagerRepositorySelector {
|
|
43
|
+
revision: number;
|
|
44
|
+
rules: IGitManagerProtectedRefRule[];
|
|
45
|
+
}
|
|
46
|
+
export type TGitManagerProtectedRefsApplyStatus = 'applied' | 'idempotent' | 'stale';
|
|
47
|
+
export interface IGitManagerProtectedRefsApplyResult {
|
|
48
|
+
status: TGitManagerProtectedRefsApplyStatus;
|
|
49
|
+
effectiveRevision: number;
|
|
50
|
+
rulesDigest: string;
|
|
51
|
+
}
|
|
36
52
|
export interface IGitManagerRepositoryBundle extends IGitManagerRepositorySelector {
|
|
37
53
|
bundlePath: string;
|
|
38
54
|
sizeBytes: number;
|
|
39
55
|
}
|
|
56
|
+
export interface IGitManagerRepositoryArchiveRequest extends IGitManagerRepositorySelector {
|
|
57
|
+
objectId: string;
|
|
58
|
+
}
|
|
59
|
+
export interface IGitManagerRepositoryArchive extends IGitManagerRepositorySelector {
|
|
60
|
+
objectId: string;
|
|
61
|
+
archivePath: string;
|
|
62
|
+
sizeBytes: number;
|
|
63
|
+
sha256: string;
|
|
64
|
+
}
|
|
40
65
|
export interface IGitManagerRestoreBundleRequest extends IGitManagerRepositorySelector {
|
|
41
66
|
bundlePath: string;
|
|
42
67
|
defaultBranch?: string;
|
|
@@ -45,6 +70,7 @@ export interface IGitManagerOptions {
|
|
|
45
70
|
dataDir?: string;
|
|
46
71
|
transferDir?: string;
|
|
47
72
|
maxBundleBytes?: number;
|
|
73
|
+
maxArchiveBytes?: number;
|
|
48
74
|
smartHttp?: IGitManagerSmartHttpOptions;
|
|
49
75
|
}
|
|
50
76
|
export interface IRustGitManagerSmartHttpConfig {
|
|
@@ -74,6 +100,7 @@ export interface IRustGitManagerConfig {
|
|
|
74
100
|
dataDir: string;
|
|
75
101
|
transferDir: string;
|
|
76
102
|
maxBundleBytes: number;
|
|
103
|
+
maxArchiveBytes: number;
|
|
77
104
|
smartHttp?: IRustGitManagerSmartHttpConfig;
|
|
78
105
|
}
|
|
79
106
|
export interface IGitManagerSmartHttpStatus {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryBundle, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerRestoreBundleRequest, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IRustGitManagerConfig } from './models.js';
|
|
2
|
+
import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerProtectedRefsApplyResult, IGitManagerSmartHttpRepositoryProtectedRefs, IGitManagerRepositoryBundle, IGitManagerRepositoryArchive, IGitManagerRepositoryArchiveRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerRestoreBundleRequest, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IRustGitManagerConfig } from './models.js';
|
|
3
3
|
export declare class RustGitManagerBridge extends plugins.EventEmitter {
|
|
4
4
|
private bridge;
|
|
5
5
|
constructor();
|
|
@@ -11,11 +11,13 @@ export declare class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
11
11
|
getStatus(): Promise<IGitManagerStatus>;
|
|
12
12
|
setSmartHttpRepositoryAccess(accessArg: IGitManagerSmartHttpRepositoryAccess): Promise<void>;
|
|
13
13
|
setSmartHttpRepositoryVisibility(visibilityArg: IGitManagerSmartHttpRepositoryVisibility): Promise<void>;
|
|
14
|
+
setSmartHttpRepositoryProtectedRefs(protectedRefsArg: IGitManagerSmartHttpRepositoryProtectedRefs): Promise<IGitManagerProtectedRefsApplyResult>;
|
|
14
15
|
initBareRepository(requestArg: IGitManagerInitBareRepositoryRequest): Promise<IGitManagerRepositoryInfo>;
|
|
15
16
|
importMirror(requestArg: IGitManagerImportMirrorRequest): Promise<IGitManagerRepositoryInfo>;
|
|
16
17
|
refreshMirror(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
|
|
17
18
|
verifyRepository(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
|
|
18
19
|
createRepositoryBundle(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryBundle>;
|
|
20
|
+
createRepositoryArchive(requestArg: IGitManagerRepositoryArchiveRequest): Promise<IGitManagerRepositoryArchive>;
|
|
19
21
|
restoreRepositoryBundle(requestArg: IGitManagerRestoreBundleRequest): Promise<IGitManagerRepositoryInfo>;
|
|
20
22
|
listRepositories(): Promise<IGitManagerRepositoryInfo[]>;
|
|
21
23
|
listRefs(requestArg: IGitManagerRefRequest): Promise<IGitManagerRef[]>;
|
|
@@ -64,6 +64,9 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
64
64
|
async setSmartHttpRepositoryVisibility(visibilityArg) {
|
|
65
65
|
await this.bridge.sendCommand('setSmartHttpRepositoryVisibility', visibilityArg);
|
|
66
66
|
}
|
|
67
|
+
async setSmartHttpRepositoryProtectedRefs(protectedRefsArg) {
|
|
68
|
+
return this.bridge.sendCommand('setSmartHttpRepositoryProtectedRefs', protectedRefsArg);
|
|
69
|
+
}
|
|
67
70
|
async initBareRepository(requestArg) {
|
|
68
71
|
return this.bridge.sendCommand('initBareRepository', requestArg);
|
|
69
72
|
}
|
|
@@ -79,6 +82,9 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
79
82
|
async createRepositoryBundle(requestArg) {
|
|
80
83
|
return this.bridge.sendCommand('createRepositoryBundle', requestArg);
|
|
81
84
|
}
|
|
85
|
+
async createRepositoryArchive(requestArg) {
|
|
86
|
+
return this.bridge.sendCommand('createRepositoryArchive', requestArg);
|
|
87
|
+
}
|
|
82
88
|
async restoreRepositoryBundle(requestArg) {
|
|
83
89
|
return this.bridge.sendCommand('restoreRepositoryBundle', requestArg);
|
|
84
90
|
}
|
|
@@ -110,4 +116,4 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
110
116
|
return this.bridge.sendCommand('getTag', requestArg);
|
|
111
117
|
}
|
|
112
118
|
}
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1naXRtYW5hZ2VyLWJyaWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3J1c3QtZ2l0bWFuYWdlci1icmlkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUEwRHhDLFNBQVMsY0FBYztJQUNyQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakYsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsdUJBQXVCO0lBQzlCLE1BQU0sT0FBTyxHQUEyQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3pFLE1BQU0sS0FBSyxHQUEyQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQixJQUFJLE1BQU0sRUFBRSxD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
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -4,7 +4,7 @@ Headless Git manager for the foss.global Git platform.
|
|
|
4
4
|
|
|
5
5
|
This package follows the push.rocks Rust-backed package pattern: TypeScript owns the public package API and lifecycle, while Rust owns the Git/storage/protocol engine. TypeScript controls the Rust binary through `@push.rocks/smartrust`, and builds use `@git.zone/tsrust`.
|
|
6
6
|
|
|
7
|
-
The current implementation provides lifecycle IPC, local bare repository and mirror management, bounded read APIs, durable repository bundle transfer, public and trusted-ingress private clone/fetch,
|
|
7
|
+
The current implementation provides lifecycle IPC, local bare repository and mirror management, bounded read APIs, durable repository bundle transfer, public and trusted-ingress private clone/fetch, trusted-ingress receive-pack, and revision-fenced protection for exact branch refs. User identity, permissions, TLS, durable protected-ref policy storage, and durable post-push repository storage remain the embedding service's responsibility.
|
|
8
8
|
|
|
9
9
|
## Issue Reporting and Security
|
|
10
10
|
|
|
@@ -153,6 +153,40 @@ await gitManager.setSmartHttpRepositoryVisibility({
|
|
|
153
153
|
|
|
154
154
|
Use monotonic, non-negative safe integers for `revision`. Stale revisions are ignored, equal revisions are idempotent when their visibility matches, conflicting equal revisions fail, and newer revisions replace the previous visibility state.
|
|
155
155
|
|
|
156
|
+
## Protected refs
|
|
157
|
+
|
|
158
|
+
Protected refs are configured per repository as one complete, revisioned rule set:
|
|
159
|
+
|
|
160
|
+
```ts
|
|
161
|
+
const result = await gitManager.setSmartHttpRepositoryProtectedRefs({
|
|
162
|
+
org: 'foss.global',
|
|
163
|
+
repo: 'gitmanager',
|
|
164
|
+
revision: 1,
|
|
165
|
+
rules: [
|
|
166
|
+
{
|
|
167
|
+
refName: 'refs/heads/main',
|
|
168
|
+
allowCreates: false,
|
|
169
|
+
allowDeletes: false,
|
|
170
|
+
allowForcePushes: false,
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
console.log(result.status, result.effectiveRevision, result.rulesDigest);
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Rules accept canonical, exact `refs/heads/...` names only; patterns, tags, roles, and bypass identities are not supported. All three permission booleans are required. Unlisted refs are unaffected. GitManager accepts at most 64 unique rules and canonicalizes their order.
|
|
179
|
+
|
|
180
|
+
Protected creates, deletes, and updates require valid commit objects. When `allowForcePushes` is `false`, an existing protected branch can move only through a fast-forward update.
|
|
181
|
+
|
|
182
|
+
Every start begins with no admitted policy for any repository, so receive-pack fails closed until the embedding service explicitly initializes that repository. Revision `0` is reserved for the empty policy and must use `rules: []`; the first non-empty policy must use revision `1` or higher. Clearing protection requires a newer revision with `rules: []`.
|
|
183
|
+
|
|
184
|
+
The first explicit policy after a start and every higher revision return `applied`. An equal revision with identical canonical rules returns `idempotent`. A lower revision returns `stale` with the effective revision and digest, while conflicting rules at an equal revision fail. Every successful result includes the effective revision and SHA-256 digest of the canonical rules.
|
|
185
|
+
|
|
186
|
+
Protected-ref state is process-local by design. The embedding service must persist the desired revision and rules, replay them after every `start()`, verify that the returned effective revision and digest match the desired policy, and admit no pushes before that verification succeeds. Policy mutation and receive-pack admission for the same repository must be serialized. Each receive-pack invocation is bound to one immutable policy snapshot.
|
|
187
|
+
|
|
188
|
+
Receive-pack uses only GitManager's private, process-specific hook directory; repository-configured hooks are not executed. The managed pre-receive hook rejects the complete push when policy bootstrap, decoding, schema validation, repository selection, object-format validation, commit or ancestry checks, or timeout handling fails.
|
|
189
|
+
|
|
156
190
|
When enabled, `getStatus().smartHttp` reports `{ running, bindAddress, port, baseUrl }`. The server also exposes `GET /healthz` for a local ingress health check.
|
|
157
191
|
|
|
158
192
|
## Public API
|
|
@@ -163,6 +197,7 @@ When enabled, `getStatus().smartHttp` reports `{ running, bindAddress, port, bas
|
|
|
163
197
|
- `GitManager.getStatus()`: returns `{ running, dataDir, uptimeMs, smartHttp? }`.
|
|
164
198
|
- `GitManager.setSmartHttpRepositoryAccess()`: atomically replaces the running Smart HTTP allow-all/allowlist state.
|
|
165
199
|
- `GitManager.setSmartHttpRepositoryVisibility()`: applies one revision-ordered repository visibility update.
|
|
200
|
+
- `GitManager.setSmartHttpRepositoryProtectedRefs()`: applies a complete revision-fenced set of exact protected-head rules and returns its effective revision and digest.
|
|
166
201
|
- `GitManager.initBareRepository()`: creates an empty local bare repository.
|
|
167
202
|
- `GitManager.importMirror()`: imports a remote repository with `git clone --mirror`. Supported remote forms are `https://`, `http://`, `ssh://`, `git://`, `file://`, and SCP-like `git@host:org/repo.git` URLs.
|
|
168
203
|
- `GitManager.refreshMirror()`: atomically fetches and verifies the configured mirror source.
|
|
@@ -180,13 +215,13 @@ When enabled, `getStatus().smartHttp` reports `{ running, bindAddress, port, bas
|
|
|
180
215
|
- `GitManager.getTag()`: reads one tag by exact name.
|
|
181
216
|
- `GitManager.running`: local facade running state.
|
|
182
217
|
- `RustGitManagerBridge`: lower-level typed bridge around `@push.rocks/smartrust`.
|
|
183
|
-
- `IGitManagerOptions`, `IGitManagerStatus`, `IRustGitManagerConfig`: exported option
|
|
218
|
+
- `IGitManagerOptions`, `IGitManagerStatus`, `IRustGitManagerConfig`, `IGitManagerProtectedRefRule`, `IGitManagerSmartHttpRepositoryProtectedRefs`, `TGitManagerProtectedRefsApplyStatus`, and `IGitManagerProtectedRefsApplyResult`: exported option, status, and protected-ref contracts.
|
|
184
219
|
|
|
185
220
|
Repository/read DTO contracts are re-exported from the published `@foss.global/interfaces` package.
|
|
186
221
|
|
|
187
222
|
Read/list APIs go through JSON IPC. Git packfile streaming is served directly by the Rust engine through controlled `git upload-pack` and `git receive-pack` subprocesses; packfiles do not pass through JSON IPC.
|
|
188
223
|
|
|
189
|
-
Read APIs and Smart HTTP use the system `git` CLI with explicit arguments, non-interactive environment variables, command timeouts, ref-to-object-id resolution, path validation, bounded stdout/stderr capture, ref/tree result caps, and a 1 MiB file read cap. Receive-pack streams bounded requests,
|
|
224
|
+
Read APIs and Smart HTTP use the system `git` CLI with explicit arguments, non-interactive environment variables, command timeouts, ref-to-object-id resolution, path validation, bounded stdout/stderr capture, ref/tree result caps, and a 1 MiB file read cap. Receive-pack streams bounded requests, replaces repository-configured hooks with GitManager's verified managed pre-receive hook, enables incoming object fsck, and rejects the complete push when policy evaluation cannot complete safely.
|
|
190
225
|
|
|
191
226
|
## Rust Build
|
|
192
227
|
|
|
@@ -207,7 +242,7 @@ pnpm run test:rust
|
|
|
207
242
|
pnpm run build
|
|
208
243
|
```
|
|
209
244
|
|
|
210
|
-
`pnpm test` runs the `pretest` hook first, which builds the Rust binaries with `tsrust`, and then runs lifecycle, local mirror/read API, clone/fetch denial, trusted receive-pack denial, and real push tests through `smartrust`.
|
|
245
|
+
`pnpm test` runs the `pretest` hook first, which builds the Rust binaries with `tsrust`, and then runs lifecycle, local mirror/read API, clone/fetch denial, trusted receive-pack denial, explicit policy initialization, protected create/delete/non-fast-forward enforcement, inherited self-test hardening, restart replay, and real push tests through `smartrust`.
|
|
211
246
|
|
|
212
247
|
## License and Legal Information
|
|
213
248
|
|
package/thirdparty.md
CHANGED
|
@@ -16,6 +16,7 @@ This package bundles Rust binaries in `dist_rust/`. Those binaries are built fro
|
|
|
16
16
|
| axum-core | 0.5.6 | MIT |
|
|
17
17
|
| base64 | 0.22.1 | Apache-2.0 OR MIT |
|
|
18
18
|
| bitflags | 2.13.0 | Apache-2.0 OR MIT |
|
|
19
|
+
| block-buffer | 0.10.4 | MIT OR Apache-2.0 |
|
|
19
20
|
| bytes | 1.12.0 | MIT |
|
|
20
21
|
| cfg-if | 1.0.4 | Apache-2.0 OR MIT |
|
|
21
22
|
| clap | 4.6.1 | Apache-2.0 OR MIT |
|
|
@@ -23,6 +24,9 @@ This package bundles Rust binaries in `dist_rust/`. Those binaries are built fro
|
|
|
23
24
|
| clap_derive | 4.6.1 | Apache-2.0 OR MIT |
|
|
24
25
|
| clap_lex | 1.1.0 | Apache-2.0 OR MIT |
|
|
25
26
|
| colorchoice | 1.0.5 | Apache-2.0 OR MIT |
|
|
27
|
+
| cpufeatures | 0.2.17 | MIT OR Apache-2.0 |
|
|
28
|
+
| crypto-common | 0.1.7 | MIT OR Apache-2.0 |
|
|
29
|
+
| digest | 0.10.7 | MIT OR Apache-2.0 |
|
|
26
30
|
| errno | 0.3.14 | Apache-2.0 OR MIT |
|
|
27
31
|
| form_urlencoded | 1.2.2 | Apache-2.0 OR MIT |
|
|
28
32
|
| futures-channel | 0.3.33 | Apache-2.0 OR MIT |
|
|
@@ -31,6 +35,7 @@ This package bundles Rust binaries in `dist_rust/`. Those binaries are built fro
|
|
|
31
35
|
| futures-sink | 0.3.33 | Apache-2.0 OR MIT |
|
|
32
36
|
| futures-task | 0.3.33 | Apache-2.0 OR MIT |
|
|
33
37
|
| futures-util | 0.3.33 | Apache-2.0 OR MIT |
|
|
38
|
+
| generic-array | 0.14.7 | MIT |
|
|
34
39
|
| heck | 0.5.0 | Apache-2.0 OR MIT |
|
|
35
40
|
| http | 1.4.2 | Apache-2.0 OR MIT |
|
|
36
41
|
| http-body | 1.1.0 | MIT |
|
|
@@ -70,6 +75,7 @@ This package bundles Rust binaries in `dist_rust/`. Those binaries are built fro
|
|
|
70
75
|
| serde_json | 1.0.150 | Apache-2.0 OR MIT |
|
|
71
76
|
| serde_path_to_error | 0.1.20 | Apache-2.0 OR MIT |
|
|
72
77
|
| serde_urlencoded | 0.7.1 | Apache-2.0 OR MIT |
|
|
78
|
+
| sha2 | 0.10.9 | MIT OR Apache-2.0 |
|
|
73
79
|
| sharded-slab | 0.1.7 | MIT |
|
|
74
80
|
| signal-hook-registry | 1.4.8 | Apache-2.0 OR MIT |
|
|
75
81
|
| slab | 0.4.12 | MIT |
|
|
@@ -91,9 +97,11 @@ This package bundles Rust binaries in `dist_rust/`. Those binaries are built fro
|
|
|
91
97
|
| tracing-core | 0.1.36 | MIT |
|
|
92
98
|
| tracing-log | 0.2.0 | MIT |
|
|
93
99
|
| tracing-subscriber | 0.3.23 | MIT |
|
|
100
|
+
| typenum | 1.20.1 | MIT OR Apache-2.0 |
|
|
94
101
|
| unicode-ident | 1.0.24 | (Apache-2.0 OR MIT) AND Unicode-3.0 |
|
|
95
102
|
| utf8parse | 0.2.2 | Apache-2.0 OR MIT |
|
|
96
103
|
| valuable | 0.1.1 | MIT |
|
|
104
|
+
| version_check | 0.9.5 | MIT OR Apache-2.0 |
|
|
97
105
|
| wasi | 0.11.1+wasi-snapshot-preview1 | Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT |
|
|
98
106
|
| windows-link | 0.2.1 | Apache-2.0 OR MIT |
|
|
99
107
|
| windows-sys | 0.61.2 | Apache-2.0 OR MIT |
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/classes.gitmanager.ts
CHANGED
|
@@ -13,7 +13,11 @@ import type {
|
|
|
13
13
|
IGitManagerReadFileRequest,
|
|
14
14
|
IGitManagerRef,
|
|
15
15
|
IGitManagerRefRequest,
|
|
16
|
+
IGitManagerProtectedRefsApplyResult,
|
|
17
|
+
IGitManagerSmartHttpRepositoryProtectedRefs,
|
|
16
18
|
IGitManagerRepositoryBundle,
|
|
19
|
+
IGitManagerRepositoryArchive,
|
|
20
|
+
IGitManagerRepositoryArchiveRequest,
|
|
17
21
|
IGitManagerRepositoryInfo,
|
|
18
22
|
IGitManagerRepositorySelector,
|
|
19
23
|
IGitManagerRestoreBundleRequest,
|
|
@@ -45,6 +49,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
45
49
|
dataDir,
|
|
46
50
|
transferDir: optionsArg.transferDir ?? plugins.path.join(dataDir, 'transfers'),
|
|
47
51
|
maxBundleBytes: optionsArg.maxBundleBytes ?? 8 * 1024 * 1024 * 1024,
|
|
52
|
+
maxArchiveBytes: optionsArg.maxArchiveBytes ?? 128 * 1024 * 1024,
|
|
48
53
|
smartHttp: smartHttpOptions && smartHttpOptions.enabled !== false
|
|
49
54
|
? {
|
|
50
55
|
bindAddress: smartHttpOptions.bindAddress ?? '127.0.0.1',
|
|
@@ -161,6 +166,23 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
161
166
|
});
|
|
162
167
|
}
|
|
163
168
|
|
|
169
|
+
public async setSmartHttpRepositoryProtectedRefs(
|
|
170
|
+
protectedRefsArg: IGitManagerSmartHttpRepositoryProtectedRefs,
|
|
171
|
+
): Promise<IGitManagerProtectedRefsApplyResult> {
|
|
172
|
+
this.assertRunning();
|
|
173
|
+
return this.bridge.setSmartHttpRepositoryProtectedRefs({
|
|
174
|
+
org: protectedRefsArg.org,
|
|
175
|
+
repo: protectedRefsArg.repo,
|
|
176
|
+
revision: protectedRefsArg.revision,
|
|
177
|
+
rules: protectedRefsArg.rules.map((rule) => ({
|
|
178
|
+
refName: rule.refName,
|
|
179
|
+
allowCreates: rule.allowCreates,
|
|
180
|
+
allowDeletes: rule.allowDeletes,
|
|
181
|
+
allowForcePushes: rule.allowForcePushes,
|
|
182
|
+
})),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
|
|
164
186
|
public get running(): boolean {
|
|
165
187
|
return this.started && this.bridge.running;
|
|
166
188
|
}
|
|
@@ -192,6 +214,13 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
192
214
|
return this.bridge.createRepositoryBundle(requestArg);
|
|
193
215
|
}
|
|
194
216
|
|
|
217
|
+
public async createRepositoryArchive(
|
|
218
|
+
requestArg: IGitManagerRepositoryArchiveRequest,
|
|
219
|
+
): Promise<IGitManagerRepositoryArchive> {
|
|
220
|
+
this.assertRunning();
|
|
221
|
+
return this.bridge.createRepositoryArchive(requestArg);
|
|
222
|
+
}
|
|
223
|
+
|
|
195
224
|
public async restoreRepositoryBundle(
|
|
196
225
|
requestArg: IGitManagerRestoreBundleRequest,
|
|
197
226
|
): Promise<IGitManagerRepositoryInfo> {
|
package/ts/models.ts
CHANGED
|
@@ -40,12 +40,49 @@ export interface IGitManagerSmartHttpRepositoryVisibility
|
|
|
40
40
|
revision: number;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
export interface IGitManagerProtectedRefRule {
|
|
44
|
+
refName: string;
|
|
45
|
+
allowCreates: boolean;
|
|
46
|
+
allowDeletes: boolean;
|
|
47
|
+
allowForcePushes: boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface IGitManagerSmartHttpRepositoryProtectedRefs
|
|
51
|
+
extends IGitManagerRepositorySelector {
|
|
52
|
+
revision: number;
|
|
53
|
+
rules: IGitManagerProtectedRefRule[];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type TGitManagerProtectedRefsApplyStatus =
|
|
57
|
+
| 'applied'
|
|
58
|
+
| 'idempotent'
|
|
59
|
+
| 'stale';
|
|
60
|
+
|
|
61
|
+
export interface IGitManagerProtectedRefsApplyResult {
|
|
62
|
+
status: TGitManagerProtectedRefsApplyStatus;
|
|
63
|
+
effectiveRevision: number;
|
|
64
|
+
rulesDigest: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
43
67
|
export interface IGitManagerRepositoryBundle
|
|
44
68
|
extends IGitManagerRepositorySelector {
|
|
45
69
|
bundlePath: string;
|
|
46
70
|
sizeBytes: number;
|
|
47
71
|
}
|
|
48
72
|
|
|
73
|
+
export interface IGitManagerRepositoryArchiveRequest
|
|
74
|
+
extends IGitManagerRepositorySelector {
|
|
75
|
+
objectId: string;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface IGitManagerRepositoryArchive
|
|
79
|
+
extends IGitManagerRepositorySelector {
|
|
80
|
+
objectId: string;
|
|
81
|
+
archivePath: string;
|
|
82
|
+
sizeBytes: number;
|
|
83
|
+
sha256: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
49
86
|
export interface IGitManagerRestoreBundleRequest
|
|
50
87
|
extends IGitManagerRepositorySelector {
|
|
51
88
|
bundlePath: string;
|
|
@@ -56,6 +93,7 @@ export interface IGitManagerOptions {
|
|
|
56
93
|
dataDir?: string;
|
|
57
94
|
transferDir?: string;
|
|
58
95
|
maxBundleBytes?: number;
|
|
96
|
+
maxArchiveBytes?: number;
|
|
59
97
|
smartHttp?: IGitManagerSmartHttpOptions;
|
|
60
98
|
}
|
|
61
99
|
|
|
@@ -89,6 +127,7 @@ export interface IRustGitManagerConfig {
|
|
|
89
127
|
dataDir: string;
|
|
90
128
|
transferDir: string;
|
|
91
129
|
maxBundleBytes: number;
|
|
130
|
+
maxArchiveBytes: number;
|
|
92
131
|
smartHttp?: IRustGitManagerSmartHttpConfig;
|
|
93
132
|
}
|
|
94
133
|
|
|
@@ -13,7 +13,11 @@ import type {
|
|
|
13
13
|
IGitManagerReadFileRequest,
|
|
14
14
|
IGitManagerRef,
|
|
15
15
|
IGitManagerRefRequest,
|
|
16
|
+
IGitManagerProtectedRefsApplyResult,
|
|
17
|
+
IGitManagerSmartHttpRepositoryProtectedRefs,
|
|
16
18
|
IGitManagerRepositoryBundle,
|
|
19
|
+
IGitManagerRepositoryArchive,
|
|
20
|
+
IGitManagerRepositoryArchiveRequest,
|
|
17
21
|
IGitManagerRepositoryInfo,
|
|
18
22
|
IGitManagerRepositorySelector,
|
|
19
23
|
IGitManagerRestoreBundleRequest,
|
|
@@ -33,11 +37,13 @@ type TGitManagerCommands = {
|
|
|
33
37
|
getStatus: { params: Record<string, never>; result: IGitManagerStatus };
|
|
34
38
|
setSmartHttpRepositoryAccess: { params: IGitManagerSmartHttpRepositoryAccess; result: Record<string, never> };
|
|
35
39
|
setSmartHttpRepositoryVisibility: { params: IGitManagerSmartHttpRepositoryVisibility; result: Record<string, never> };
|
|
40
|
+
setSmartHttpRepositoryProtectedRefs: { params: IGitManagerSmartHttpRepositoryProtectedRefs; result: IGitManagerProtectedRefsApplyResult };
|
|
36
41
|
initBareRepository: { params: IGitManagerInitBareRepositoryRequest; result: IGitManagerRepositoryInfo };
|
|
37
42
|
importMirror: { params: IGitManagerImportMirrorRequest; result: IGitManagerRepositoryInfo };
|
|
38
43
|
refreshMirror: { params: IGitManagerRepositorySelector; result: IGitManagerRepositoryInfo };
|
|
39
44
|
verifyRepository: { params: IGitManagerRepositorySelector; result: IGitManagerRepositoryInfo };
|
|
40
45
|
createRepositoryBundle: { params: IGitManagerRepositorySelector; result: IGitManagerRepositoryBundle };
|
|
46
|
+
createRepositoryArchive: { params: IGitManagerRepositoryArchiveRequest; result: IGitManagerRepositoryArchive };
|
|
41
47
|
restoreRepositoryBundle: { params: IGitManagerRestoreBundleRequest; result: IGitManagerRepositoryInfo };
|
|
42
48
|
listRepositories: { params: Record<string, never>; result: IGitManagerRepositoryInfo[] };
|
|
43
49
|
listRefs: { params: IGitManagerRefRequest; result: IGitManagerRef[] };
|
|
@@ -134,6 +140,15 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
134
140
|
await this.bridge.sendCommand('setSmartHttpRepositoryVisibility', visibilityArg);
|
|
135
141
|
}
|
|
136
142
|
|
|
143
|
+
public async setSmartHttpRepositoryProtectedRefs(
|
|
144
|
+
protectedRefsArg: IGitManagerSmartHttpRepositoryProtectedRefs,
|
|
145
|
+
): Promise<IGitManagerProtectedRefsApplyResult> {
|
|
146
|
+
return this.bridge.sendCommand(
|
|
147
|
+
'setSmartHttpRepositoryProtectedRefs',
|
|
148
|
+
protectedRefsArg,
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
|
|
137
152
|
public async initBareRepository(requestArg: IGitManagerInitBareRepositoryRequest): Promise<IGitManagerRepositoryInfo> {
|
|
138
153
|
return this.bridge.sendCommand('initBareRepository', requestArg);
|
|
139
154
|
}
|
|
@@ -156,6 +171,12 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
156
171
|
return this.bridge.sendCommand('createRepositoryBundle', requestArg);
|
|
157
172
|
}
|
|
158
173
|
|
|
174
|
+
public async createRepositoryArchive(
|
|
175
|
+
requestArg: IGitManagerRepositoryArchiveRequest,
|
|
176
|
+
): Promise<IGitManagerRepositoryArchive> {
|
|
177
|
+
return this.bridge.sendCommand('createRepositoryArchive', requestArg);
|
|
178
|
+
}
|
|
179
|
+
|
|
159
180
|
public async restoreRepositoryBundle(
|
|
160
181
|
requestArg: IGitManagerRestoreBundleRequest,
|
|
161
182
|
): Promise<IGitManagerRepositoryInfo> {
|