@foss.global/gitmanager 0.2.0 → 0.3.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 +9 -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 +5 -1
- package/dist_ts/classes.gitmanager.js +17 -1
- package/dist_ts/models.d.ts +1 -1
- package/dist_ts/rust-gitmanager-bridge.d.ts +5 -1
- package/dist_ts/rust-gitmanager-bridge.js +13 -1
- package/package.json +3 -3
- package/readme.md +4 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.gitmanager.ts +27 -0
- package/ts/models.ts +13 -0
- package/ts/rust-gitmanager-bridge.ts +27 -0
package/changelog.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-06-23 - 0.3.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- add commit detail, diff, and tag APIs (api)
|
|
8
|
+
- Expose getCommit, getDiff, listTags, and getTag through the TypeScript facade and Rust bridge.
|
|
9
|
+
- Implement Rust IPC handlers and git operations for commit metadata, structured diffs, and lightweight or annotated tag metadata.
|
|
10
|
+
- Update README coverage and integration tests for the new APIs.
|
|
11
|
+
|
|
3
12
|
## 2026-06-22 - 0.2.0
|
|
4
13
|
|
|
5
14
|
### Features
|
|
Binary file
|
|
Binary file
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@foss.global/gitmanager',
|
|
6
|
-
version: '0.
|
|
6
|
+
version: '0.3.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 { IGitManagerCommitSummary, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerStatus, IGitManagerTreeEntry, IGitManagerTreeRequest, IGitManagerOptions } from './models.js';
|
|
2
|
+
import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, 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;
|
|
@@ -18,6 +18,10 @@ export declare class GitManager extends plugins.EventEmitter {
|
|
|
18
18
|
listTree(requestArg: IGitManagerTreeRequest): Promise<IGitManagerTreeEntry[]>;
|
|
19
19
|
readFile(requestArg: IGitManagerReadFileRequest): Promise<IGitManagerFileContent>;
|
|
20
20
|
listCommits(requestArg: IGitManagerListCommitsRequest): Promise<IGitManagerCommitSummary[]>;
|
|
21
|
+
getCommit(requestArg: IGitManagerCommitRequest): Promise<IGitManagerCommitDetail>;
|
|
22
|
+
getDiff(requestArg: IGitManagerDiffRequest): Promise<IGitManagerDiff>;
|
|
23
|
+
listTags(requestArg: IGitManagerListTagsRequest): Promise<IGitManagerTag[]>;
|
|
24
|
+
getTag(requestArg: IGitManagerTagRequest): Promise<IGitManagerTag>;
|
|
21
25
|
private startInternal;
|
|
22
26
|
private assertRunning;
|
|
23
27
|
}
|
|
@@ -92,6 +92,22 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
92
92
|
this.assertRunning();
|
|
93
93
|
return this.bridge.listCommits(requestArg);
|
|
94
94
|
}
|
|
95
|
+
async getCommit(requestArg) {
|
|
96
|
+
this.assertRunning();
|
|
97
|
+
return this.bridge.getCommit(requestArg);
|
|
98
|
+
}
|
|
99
|
+
async getDiff(requestArg) {
|
|
100
|
+
this.assertRunning();
|
|
101
|
+
return this.bridge.getDiff(requestArg);
|
|
102
|
+
}
|
|
103
|
+
async listTags(requestArg) {
|
|
104
|
+
this.assertRunning();
|
|
105
|
+
return this.bridge.listTags(requestArg);
|
|
106
|
+
}
|
|
107
|
+
async getTag(requestArg) {
|
|
108
|
+
this.assertRunning();
|
|
109
|
+
return this.bridge.getTag(requestArg);
|
|
110
|
+
}
|
|
95
111
|
async startInternal() {
|
|
96
112
|
const spawned = await this.bridge.spawn();
|
|
97
113
|
if (!spawned) {
|
|
@@ -127,4 +143,4 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
127
143
|
}
|
|
128
144
|
}
|
|
129
145
|
}
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5naXRtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBd0J4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRSxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU8sQ0FBQyxZQUFZO0lBT2xELFlBQVksYUFBaUMsRUFBRTtRQUM3QyxLQUFLLEVBQUUsQ0FBQztRQVBGLFdBQU0sR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixpQkFBWSxHQUF5QixJQUFJLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLNUIsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDO1NBQzNGLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFtQixFQUFFLE1BQXFCLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFF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VUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBc0M7UUFDMUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBeUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBb0M7UUFDekQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBa0M7UUFDckQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBc0M7UUFDMUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBaUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckMsQ0FBQzt3QkFBUyxDQUFDO29CQUNULElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
package/dist_ts/models.d.ts
CHANGED
|
@@ -9,4 +9,4 @@ export interface IGitManagerStatus {
|
|
|
9
9
|
dataDir: string;
|
|
10
10
|
uptimeMs: number;
|
|
11
11
|
}
|
|
12
|
-
export type { IGitManagerCommitSummary, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerTreeEntry, IGitManagerTreeRequest, TGitManagerObjectType, TGitManagerRefType, TGitManagerTreeEntryType, } from '@foss.global/interfaces';
|
|
12
|
+
export type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffFile, IGitManagerDiffHunk, IGitManagerDiffLine, IGitManagerDiffRequest, IGitManagerDiffStats, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, TGitManagerDiffFileStatus, TGitManagerDiffLineKind, TGitManagerObjectType, TGitManagerRefType, TGitManagerTreeEntryType, } from '@foss.global/interfaces';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
import type { IGitManagerCommitSummary, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerStatus, IGitManagerTreeEntry, IGitManagerTreeRequest, IRustGitManagerConfig } from './models.js';
|
|
2
|
+
import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, 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();
|
|
@@ -16,4 +16,8 @@ export declare class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
16
16
|
listTree(requestArg: IGitManagerTreeRequest): Promise<IGitManagerTreeEntry[]>;
|
|
17
17
|
readFile(requestArg: IGitManagerReadFileRequest): Promise<IGitManagerFileContent>;
|
|
18
18
|
listCommits(requestArg: IGitManagerListCommitsRequest): Promise<IGitManagerCommitSummary[]>;
|
|
19
|
+
getCommit(requestArg: IGitManagerCommitRequest): Promise<IGitManagerCommitDetail>;
|
|
20
|
+
getDiff(requestArg: IGitManagerDiffRequest): Promise<IGitManagerDiff>;
|
|
21
|
+
listTags(requestArg: IGitManagerListTagsRequest): Promise<IGitManagerTag[]>;
|
|
22
|
+
getTag(requestArg: IGitManagerTagRequest): Promise<IGitManagerTag>;
|
|
19
23
|
}
|
|
@@ -79,5 +79,17 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
79
79
|
async listCommits(requestArg) {
|
|
80
80
|
return this.bridge.sendCommand('listCommits', requestArg);
|
|
81
81
|
}
|
|
82
|
+
async getCommit(requestArg) {
|
|
83
|
+
return this.bridge.sendCommand('getCommit', requestArg);
|
|
84
|
+
}
|
|
85
|
+
async getDiff(requestArg) {
|
|
86
|
+
return this.bridge.sendCommand('getDiff', requestArg);
|
|
87
|
+
}
|
|
88
|
+
async listTags(requestArg) {
|
|
89
|
+
return this.bridge.sendCommand('listTags', requestArg);
|
|
90
|
+
}
|
|
91
|
+
async getTag(requestArg) {
|
|
92
|
+
return this.bridge.sendCommand('getTag', requestArg);
|
|
93
|
+
}
|
|
82
94
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1naXRtYW5hZ2VyLWJyaWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3J1c3QtZ2l0bWFuYWdlci1icmlkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUF5Q3hDLFNBQVMsY0FBYztJQUNyQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakYsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsdUJBQXVCO0lBQzlCLE1BQU0sT0FBTyxHQUEyQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3pFLE1BQU0sS0FBSyxHQUEyQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQixJQUFJLE1BQU0sRUFBRSxD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foss.global/gitmanager",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Headless Git manager for the foss.global Git platform, with a TypeScript API and Rust engine.",
|
|
6
6
|
"exports": {
|
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
"author": "Task Venture Capital GmbH",
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@foss.global/interfaces": "^0.
|
|
13
|
+
"@foss.global/interfaces": "^0.3.0",
|
|
14
14
|
"@push.rocks/smartrust": "^1.4.0"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@git.zone/tsbuild": "^4.4.2",
|
|
18
18
|
"@git.zone/tsdoc": "^2.1.1",
|
|
19
19
|
"@git.zone/tsrun": "^2.0.4",
|
|
20
|
-
"@git.zone/tsrust": "^1.
|
|
20
|
+
"@git.zone/tsrust": "^1.6.0",
|
|
21
21
|
"@git.zone/tstest": "^3.6.6",
|
|
22
22
|
"@types/node": "^26.0.0"
|
|
23
23
|
},
|
package/readme.md
CHANGED
|
@@ -60,6 +60,10 @@ await gitManager.stop();
|
|
|
60
60
|
- `GitManager.listTree()`: lists tree entries at a ref and optional path.
|
|
61
61
|
- `GitManager.readFile()`: reads a blob as base64 after checking the blob size limit.
|
|
62
62
|
- `GitManager.listCommits()`: lists commit summaries for a ref.
|
|
63
|
+
- `GitManager.getCommit()`: reads commit detail metadata, parents, author/committer data, and diff stats for a ref.
|
|
64
|
+
- `GitManager.getDiff()`: returns a structured unified diff between a head ref and its first parent or an explicit base ref.
|
|
65
|
+
- `GitManager.listTags()`: lists lightweight and annotated tags with target object metadata.
|
|
66
|
+
- `GitManager.getTag()`: reads one tag by exact name.
|
|
63
67
|
- `GitManager.running`: local facade running state.
|
|
64
68
|
- `RustGitManagerBridge`: lower-level typed bridge around `@push.rocks/smartrust`.
|
|
65
69
|
- `IGitManagerOptions`, `IGitManagerStatus`, `IRustGitManagerConfig`: exported option/status contracts.
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/classes.gitmanager.ts
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import type {
|
|
3
|
+
IGitManagerCommitDetail,
|
|
4
|
+
IGitManagerCommitRequest,
|
|
3
5
|
IGitManagerCommitSummary,
|
|
6
|
+
IGitManagerDiff,
|
|
7
|
+
IGitManagerDiffRequest,
|
|
4
8
|
IGitManagerFileContent,
|
|
5
9
|
IGitManagerImportMirrorRequest,
|
|
6
10
|
IGitManagerInitBareRepositoryRequest,
|
|
7
11
|
IGitManagerListCommitsRequest,
|
|
12
|
+
IGitManagerListTagsRequest,
|
|
8
13
|
IGitManagerReadFileRequest,
|
|
9
14
|
IGitManagerRef,
|
|
10
15
|
IGitManagerRefRequest,
|
|
11
16
|
IGitManagerRepositoryInfo,
|
|
12
17
|
IGitManagerStatus,
|
|
18
|
+
IGitManagerTag,
|
|
19
|
+
IGitManagerTagRequest,
|
|
13
20
|
IGitManagerTreeEntry,
|
|
14
21
|
IGitManagerTreeRequest,
|
|
15
22
|
IGitManagerOptions,
|
|
@@ -122,6 +129,26 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
122
129
|
return this.bridge.listCommits(requestArg);
|
|
123
130
|
}
|
|
124
131
|
|
|
132
|
+
public async getCommit(requestArg: IGitManagerCommitRequest): Promise<IGitManagerCommitDetail> {
|
|
133
|
+
this.assertRunning();
|
|
134
|
+
return this.bridge.getCommit(requestArg);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
public async getDiff(requestArg: IGitManagerDiffRequest): Promise<IGitManagerDiff> {
|
|
138
|
+
this.assertRunning();
|
|
139
|
+
return this.bridge.getDiff(requestArg);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
public async listTags(requestArg: IGitManagerListTagsRequest): Promise<IGitManagerTag[]> {
|
|
143
|
+
this.assertRunning();
|
|
144
|
+
return this.bridge.listTags(requestArg);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
public async getTag(requestArg: IGitManagerTagRequest): Promise<IGitManagerTag> {
|
|
148
|
+
this.assertRunning();
|
|
149
|
+
return this.bridge.getTag(requestArg);
|
|
150
|
+
}
|
|
151
|
+
|
|
125
152
|
private async startInternal(): Promise<void> {
|
|
126
153
|
const spawned = await this.bridge.spawn();
|
|
127
154
|
if (!spawned) {
|
package/ts/models.ts
CHANGED
|
@@ -13,18 +13,31 @@ export interface IGitManagerStatus {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export type {
|
|
16
|
+
IGitManagerCommitDetail,
|
|
17
|
+
IGitManagerCommitRequest,
|
|
16
18
|
IGitManagerCommitSummary,
|
|
19
|
+
IGitManagerDiff,
|
|
20
|
+
IGitManagerDiffFile,
|
|
21
|
+
IGitManagerDiffHunk,
|
|
22
|
+
IGitManagerDiffLine,
|
|
23
|
+
IGitManagerDiffRequest,
|
|
24
|
+
IGitManagerDiffStats,
|
|
17
25
|
IGitManagerFileContent,
|
|
18
26
|
IGitManagerImportMirrorRequest,
|
|
19
27
|
IGitManagerInitBareRepositoryRequest,
|
|
20
28
|
IGitManagerListCommitsRequest,
|
|
29
|
+
IGitManagerListTagsRequest,
|
|
21
30
|
IGitManagerReadFileRequest,
|
|
22
31
|
IGitManagerRef,
|
|
23
32
|
IGitManagerRefRequest,
|
|
24
33
|
IGitManagerRepositoryInfo,
|
|
25
34
|
IGitManagerRepositorySelector,
|
|
35
|
+
IGitManagerTag,
|
|
36
|
+
IGitManagerTagRequest,
|
|
26
37
|
IGitManagerTreeEntry,
|
|
27
38
|
IGitManagerTreeRequest,
|
|
39
|
+
TGitManagerDiffFileStatus,
|
|
40
|
+
TGitManagerDiffLineKind,
|
|
28
41
|
TGitManagerObjectType,
|
|
29
42
|
TGitManagerRefType,
|
|
30
43
|
TGitManagerTreeEntryType,
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import type {
|
|
3
|
+
IGitManagerCommitDetail,
|
|
4
|
+
IGitManagerCommitRequest,
|
|
3
5
|
IGitManagerCommitSummary,
|
|
6
|
+
IGitManagerDiff,
|
|
7
|
+
IGitManagerDiffRequest,
|
|
4
8
|
IGitManagerFileContent,
|
|
5
9
|
IGitManagerImportMirrorRequest,
|
|
6
10
|
IGitManagerInitBareRepositoryRequest,
|
|
7
11
|
IGitManagerListCommitsRequest,
|
|
12
|
+
IGitManagerListTagsRequest,
|
|
8
13
|
IGitManagerReadFileRequest,
|
|
9
14
|
IGitManagerRef,
|
|
10
15
|
IGitManagerRefRequest,
|
|
11
16
|
IGitManagerRepositoryInfo,
|
|
12
17
|
IGitManagerStatus,
|
|
18
|
+
IGitManagerTag,
|
|
19
|
+
IGitManagerTagRequest,
|
|
13
20
|
IGitManagerTreeEntry,
|
|
14
21
|
IGitManagerTreeRequest,
|
|
15
22
|
IRustGitManagerConfig,
|
|
@@ -26,6 +33,10 @@ type TGitManagerCommands = {
|
|
|
26
33
|
listTree: { params: IGitManagerTreeRequest; result: IGitManagerTreeEntry[] };
|
|
27
34
|
readFile: { params: IGitManagerReadFileRequest; result: IGitManagerFileContent };
|
|
28
35
|
listCommits: { params: IGitManagerListCommitsRequest; result: IGitManagerCommitSummary[] };
|
|
36
|
+
getCommit: { params: IGitManagerCommitRequest; result: IGitManagerCommitDetail };
|
|
37
|
+
getDiff: { params: IGitManagerDiffRequest; result: IGitManagerDiff };
|
|
38
|
+
listTags: { params: IGitManagerListTagsRequest; result: IGitManagerTag[] };
|
|
39
|
+
getTag: { params: IGitManagerTagRequest; result: IGitManagerTag };
|
|
29
40
|
};
|
|
30
41
|
|
|
31
42
|
function getPackageRoot(): string {
|
|
@@ -129,4 +140,20 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
129
140
|
public async listCommits(requestArg: IGitManagerListCommitsRequest): Promise<IGitManagerCommitSummary[]> {
|
|
130
141
|
return this.bridge.sendCommand('listCommits', requestArg);
|
|
131
142
|
}
|
|
143
|
+
|
|
144
|
+
public async getCommit(requestArg: IGitManagerCommitRequest): Promise<IGitManagerCommitDetail> {
|
|
145
|
+
return this.bridge.sendCommand('getCommit', requestArg);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
public async getDiff(requestArg: IGitManagerDiffRequest): Promise<IGitManagerDiff> {
|
|
149
|
+
return this.bridge.sendCommand('getDiff', requestArg);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
public async listTags(requestArg: IGitManagerListTagsRequest): Promise<IGitManagerTag[]> {
|
|
153
|
+
return this.bridge.sendCommand('listTags', requestArg);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
public async getTag(requestArg: IGitManagerTagRequest): Promise<IGitManagerTag> {
|
|
157
|
+
return this.bridge.sendCommand('getTag', requestArg);
|
|
158
|
+
}
|
|
132
159
|
}
|