@vibe-validate/git 0.9.0 → 0.9.4
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/dist/branch-sync.d.ts +3 -9
- package/dist/branch-sync.d.ts.map +1 -1
- package/dist/branch-sync.js +45 -15
- package/dist/branch-sync.js.map +1 -1
- package/dist/post-merge-cleanup.d.ts.map +1 -1
- package/dist/post-merge-cleanup.js +34 -53
- package/dist/post-merge-cleanup.js.map +1 -1
- package/dist/tree-hash.js +2 -2
- package/dist/tree-hash.js.map +1 -1
- package/package.json +1 -1
package/dist/branch-sync.d.ts
CHANGED
|
@@ -10,11 +10,6 @@
|
|
|
10
10
|
* - Explicit instructions when manual intervention needed
|
|
11
11
|
* - Cross-platform compatibility
|
|
12
12
|
*/
|
|
13
|
-
declare const GIT_OPTIONS: {
|
|
14
|
-
timeout: number;
|
|
15
|
-
encoding: "utf8";
|
|
16
|
-
maxBuffer: number;
|
|
17
|
-
};
|
|
18
13
|
export interface SyncCheckResult {
|
|
19
14
|
isUpToDate: boolean;
|
|
20
15
|
behindBy: number;
|
|
@@ -22,13 +17,13 @@ export interface SyncCheckResult {
|
|
|
22
17
|
hasRemote: boolean;
|
|
23
18
|
error?: string;
|
|
24
19
|
}
|
|
25
|
-
export type
|
|
20
|
+
export type GitExecutor = (_args: string[]) => Promise<{
|
|
26
21
|
stdout: string;
|
|
27
22
|
stderr: string;
|
|
28
23
|
}>;
|
|
29
24
|
export interface SyncCheckOptions {
|
|
30
25
|
remoteBranch?: string;
|
|
31
|
-
|
|
26
|
+
gitExecutor?: GitExecutor;
|
|
32
27
|
}
|
|
33
28
|
/**
|
|
34
29
|
* Branch Sync Checker
|
|
@@ -37,7 +32,7 @@ export interface SyncCheckOptions {
|
|
|
37
32
|
*/
|
|
38
33
|
export declare class BranchSyncChecker {
|
|
39
34
|
private readonly remoteBranch;
|
|
40
|
-
private readonly
|
|
35
|
+
private readonly gitExecutor;
|
|
41
36
|
constructor(options?: SyncCheckOptions);
|
|
42
37
|
/**
|
|
43
38
|
* Check if the current branch is synchronized with remote branch
|
|
@@ -64,5 +59,4 @@ export declare class BranchSyncChecker {
|
|
|
64
59
|
* @returns Sync check result
|
|
65
60
|
*/
|
|
66
61
|
export declare function checkBranchSync(options?: SyncCheckOptions): Promise<SyncCheckResult>;
|
|
67
|
-
export {};
|
|
68
62
|
//# sourceMappingURL=branch-sync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-sync.d.ts","sourceRoot":"","sources":["../src/branch-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,
|
|
1
|
+
{"version":3,"file":"branch-sync.d.ts","sourceRoot":"","sources":["../src/branch-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE3F,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AA2CD;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,OAAO,GAAE,gBAAqB;IAK1C;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;YA0C7B,gBAAgB;YAUhB,eAAe;YASf,WAAW;YAUX,gBAAgB;IAW9B;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM;CAK7C;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAG9F"}
|
package/dist/branch-sync.js
CHANGED
|
@@ -10,14 +10,44 @@
|
|
|
10
10
|
* - Explicit instructions when manual intervention needed
|
|
11
11
|
* - Cross-platform compatibility
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
import { spawn } from 'child_process';
|
|
14
|
+
const GIT_TIMEOUT = 30000; // 30 seconds timeout for git operations
|
|
15
|
+
/**
|
|
16
|
+
* Execute git command safely using spawn (prevents command injection)
|
|
17
|
+
*
|
|
18
|
+
* @param args - Git command arguments (e.g., ['rev-parse', '--abbrev-ref', 'HEAD'])
|
|
19
|
+
* @returns Promise resolving to stdout and stderr
|
|
20
|
+
*/
|
|
21
|
+
function execGit(args) {
|
|
22
|
+
return new Promise((resolve, reject) => {
|
|
23
|
+
const child = spawn('git', args, {
|
|
24
|
+
timeout: GIT_TIMEOUT
|
|
25
|
+
});
|
|
26
|
+
let stdout = '';
|
|
27
|
+
let stderr = '';
|
|
28
|
+
if (child.stdout) {
|
|
29
|
+
child.stdout.on('data', (data) => {
|
|
30
|
+
stdout += data.toString();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (child.stderr) {
|
|
34
|
+
child.stderr.on('data', (data) => {
|
|
35
|
+
stderr += data.toString();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
child.on('error', (error) => {
|
|
39
|
+
reject(error);
|
|
40
|
+
});
|
|
41
|
+
child.on('close', (code) => {
|
|
42
|
+
if (code === 0) {
|
|
43
|
+
resolve({ stdout, stderr });
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
reject(new Error(`git exited with code ${code}: ${stderr}`));
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
21
51
|
/**
|
|
22
52
|
* Branch Sync Checker
|
|
23
53
|
*
|
|
@@ -25,10 +55,10 @@ const GIT_OPTIONS = {
|
|
|
25
55
|
*/
|
|
26
56
|
export class BranchSyncChecker {
|
|
27
57
|
remoteBranch;
|
|
28
|
-
|
|
58
|
+
gitExecutor;
|
|
29
59
|
constructor(options = {}) {
|
|
30
60
|
this.remoteBranch = options.remoteBranch || 'origin/main';
|
|
31
|
-
this.
|
|
61
|
+
this.gitExecutor = options.gitExecutor || execGit;
|
|
32
62
|
}
|
|
33
63
|
/**
|
|
34
64
|
* Check if the current branch is synchronized with remote branch
|
|
@@ -74,7 +104,7 @@ export class BranchSyncChecker {
|
|
|
74
104
|
}
|
|
75
105
|
async getCurrentBranch() {
|
|
76
106
|
try {
|
|
77
|
-
const { stdout } = await this.
|
|
107
|
+
const { stdout } = await this.gitExecutor(['rev-parse', '--abbrev-ref', 'HEAD']);
|
|
78
108
|
return stdout.trim();
|
|
79
109
|
}
|
|
80
110
|
catch (error) {
|
|
@@ -84,17 +114,17 @@ export class BranchSyncChecker {
|
|
|
84
114
|
}
|
|
85
115
|
async hasRemoteBranch() {
|
|
86
116
|
try {
|
|
87
|
-
await this.
|
|
117
|
+
await this.gitExecutor(['rev-parse', '--verify', this.remoteBranch]);
|
|
88
118
|
return true;
|
|
89
119
|
}
|
|
90
|
-
catch (
|
|
120
|
+
catch (_error) {
|
|
91
121
|
return false;
|
|
92
122
|
}
|
|
93
123
|
}
|
|
94
124
|
async fetchRemote() {
|
|
95
125
|
try {
|
|
96
126
|
const [remote, branch] = this.remoteBranch.split('/');
|
|
97
|
-
await this.
|
|
127
|
+
await this.gitExecutor(['fetch', '--quiet', remote, branch]);
|
|
98
128
|
}
|
|
99
129
|
catch (error) {
|
|
100
130
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
@@ -103,7 +133,7 @@ export class BranchSyncChecker {
|
|
|
103
133
|
}
|
|
104
134
|
async getCommitsBehind() {
|
|
105
135
|
try {
|
|
106
|
-
const { stdout } = await this.
|
|
136
|
+
const { stdout } = await this.gitExecutor(['rev-list', '--count', `HEAD..${this.remoteBranch}`]);
|
|
107
137
|
const count = parseInt(stdout.trim(), 10);
|
|
108
138
|
return isNaN(count) ? 0 : count;
|
|
109
139
|
}
|
package/dist/branch-sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-sync.js","sourceRoot":"","sources":["../src/branch-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"branch-sync.js","sourceRoot":"","sources":["../src/branch-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-merge-cleanup.d.ts","sourceRoot":"","sources":["../src/post-merge-cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"post-merge-cleanup.d.ts","sourceRoot":"","sources":["../src/post-merge-cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA4BH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAErB,OAAO,GAAE,cAAmB;IAMxC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAqC1C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuC5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAO9B;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAGhG"}
|
|
@@ -12,8 +12,26 @@
|
|
|
12
12
|
* - Never deletes the current main branch or unmerged branches
|
|
13
13
|
* - Provides clear feedback on all actions taken
|
|
14
14
|
*/
|
|
15
|
-
import {
|
|
15
|
+
import { spawnSync } from 'child_process';
|
|
16
16
|
const TIMEOUT = 30000; // 30 seconds timeout for git operations
|
|
17
|
+
/**
|
|
18
|
+
* Execute git command safely using spawnSync with array arguments
|
|
19
|
+
* Prevents command injection by avoiding shell interpretation
|
|
20
|
+
*/
|
|
21
|
+
function execGitSync(args) {
|
|
22
|
+
const result = spawnSync('git', args, {
|
|
23
|
+
encoding: 'utf8',
|
|
24
|
+
timeout: TIMEOUT,
|
|
25
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
26
|
+
});
|
|
27
|
+
if (result.error) {
|
|
28
|
+
throw result.error;
|
|
29
|
+
}
|
|
30
|
+
if (result.status !== 0) {
|
|
31
|
+
throw new Error(`git ${args[0]} failed: ${result.stderr}`);
|
|
32
|
+
}
|
|
33
|
+
return result.stdout;
|
|
34
|
+
}
|
|
17
35
|
/**
|
|
18
36
|
* Post-PR Merge Cleanup
|
|
19
37
|
*
|
|
@@ -65,10 +83,7 @@ export class PostPRMergeCleanup {
|
|
|
65
83
|
*/
|
|
66
84
|
getCurrentBranch() {
|
|
67
85
|
try {
|
|
68
|
-
return
|
|
69
|
-
encoding: 'utf8',
|
|
70
|
-
timeout: TIMEOUT
|
|
71
|
-
}).trim();
|
|
86
|
+
return execGitSync(['branch', '--show-current']).trim();
|
|
72
87
|
}
|
|
73
88
|
catch (error) {
|
|
74
89
|
throw new Error(`Failed to get current branch: ${error}`);
|
|
@@ -79,11 +94,7 @@ export class PostPRMergeCleanup {
|
|
|
79
94
|
*/
|
|
80
95
|
switchToMain() {
|
|
81
96
|
try {
|
|
82
|
-
|
|
83
|
-
encoding: 'utf8',
|
|
84
|
-
timeout: TIMEOUT,
|
|
85
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
86
|
-
});
|
|
97
|
+
execGitSync(['checkout', this.mainBranch]);
|
|
87
98
|
}
|
|
88
99
|
catch (error) {
|
|
89
100
|
throw new Error(`Failed to switch to ${this.mainBranch} branch: ${error}`);
|
|
@@ -95,17 +106,9 @@ export class PostPRMergeCleanup {
|
|
|
95
106
|
syncMainBranch() {
|
|
96
107
|
try {
|
|
97
108
|
// Fetch latest changes from remote
|
|
98
|
-
|
|
99
|
-
encoding: 'utf8',
|
|
100
|
-
timeout: TIMEOUT,
|
|
101
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
102
|
-
});
|
|
109
|
+
execGitSync(['fetch', this.remoteName, this.mainBranch]);
|
|
103
110
|
// Fast-forward merge remote/main
|
|
104
|
-
|
|
105
|
-
encoding: 'utf8',
|
|
106
|
-
timeout: TIMEOUT,
|
|
107
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
108
|
-
});
|
|
111
|
+
execGitSync(['merge', `${this.remoteName}/${this.mainBranch}`, '--ff-only']);
|
|
109
112
|
}
|
|
110
113
|
catch (error) {
|
|
111
114
|
throw new Error(`Failed to sync ${this.mainBranch} branch: ${error}`);
|
|
@@ -116,11 +119,7 @@ export class PostPRMergeCleanup {
|
|
|
116
119
|
*/
|
|
117
120
|
fetchRemoteInfo() {
|
|
118
121
|
try {
|
|
119
|
-
|
|
120
|
-
encoding: 'utf8',
|
|
121
|
-
timeout: TIMEOUT,
|
|
122
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
123
|
-
});
|
|
122
|
+
execGitSync(['fetch', this.remoteName, '--prune']);
|
|
124
123
|
}
|
|
125
124
|
catch (error) {
|
|
126
125
|
throw new Error(`Failed to fetch remote info: ${error}`);
|
|
@@ -132,10 +131,7 @@ export class PostPRMergeCleanup {
|
|
|
132
131
|
deleteMergedBranches() {
|
|
133
132
|
try {
|
|
134
133
|
// Get list of local branches (excluding main)
|
|
135
|
-
const allBranches =
|
|
136
|
-
encoding: 'utf8',
|
|
137
|
-
timeout: TIMEOUT
|
|
138
|
-
})
|
|
134
|
+
const allBranches = execGitSync(['branch', '--format=%(refname:short)'])
|
|
139
135
|
.trim()
|
|
140
136
|
.split('\n')
|
|
141
137
|
.filter(branch => branch && branch !== this.mainBranch && !branch.startsWith('*'));
|
|
@@ -147,24 +143,16 @@ export class PostPRMergeCleanup {
|
|
|
147
143
|
continue;
|
|
148
144
|
}
|
|
149
145
|
try {
|
|
150
|
-
|
|
151
|
-
encoding: 'utf8',
|
|
152
|
-
timeout: TIMEOUT,
|
|
153
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
154
|
-
});
|
|
146
|
+
execGitSync(['branch', '-d', branch]);
|
|
155
147
|
deletedBranches.push(branch);
|
|
156
148
|
}
|
|
157
|
-
catch (
|
|
149
|
+
catch (_deleteError) {
|
|
158
150
|
// Try force delete if regular delete fails
|
|
159
151
|
try {
|
|
160
|
-
|
|
161
|
-
encoding: 'utf8',
|
|
162
|
-
timeout: TIMEOUT,
|
|
163
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
164
|
-
});
|
|
152
|
+
execGitSync(['branch', '-D', branch]);
|
|
165
153
|
deletedBranches.push(branch);
|
|
166
154
|
}
|
|
167
|
-
catch (
|
|
155
|
+
catch (_forceDeleteError) {
|
|
168
156
|
// Couldn't delete - skip this branch
|
|
169
157
|
}
|
|
170
158
|
}
|
|
@@ -172,7 +160,7 @@ export class PostPRMergeCleanup {
|
|
|
172
160
|
}
|
|
173
161
|
return deletedBranches;
|
|
174
162
|
}
|
|
175
|
-
catch (
|
|
163
|
+
catch (_error) {
|
|
176
164
|
return [];
|
|
177
165
|
}
|
|
178
166
|
}
|
|
@@ -181,13 +169,10 @@ export class PostPRMergeCleanup {
|
|
|
181
169
|
*/
|
|
182
170
|
isBranchMerged(branch) {
|
|
183
171
|
try {
|
|
184
|
-
const mergedBranches =
|
|
185
|
-
encoding: 'utf8',
|
|
186
|
-
timeout: TIMEOUT
|
|
187
|
-
});
|
|
172
|
+
const mergedBranches = execGitSync(['branch', '--merged', this.mainBranch, '--format=%(refname:short)']);
|
|
188
173
|
return mergedBranches.includes(branch);
|
|
189
174
|
}
|
|
190
|
-
catch (
|
|
175
|
+
catch (_error) {
|
|
191
176
|
// If we can't determine merge status, don't delete the branch
|
|
192
177
|
return false;
|
|
193
178
|
}
|
|
@@ -197,13 +182,9 @@ export class PostPRMergeCleanup {
|
|
|
197
182
|
*/
|
|
198
183
|
pruneRemoteReferences() {
|
|
199
184
|
try {
|
|
200
|
-
|
|
201
|
-
encoding: 'utf8',
|
|
202
|
-
timeout: TIMEOUT,
|
|
203
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
204
|
-
});
|
|
185
|
+
execGitSync(['remote', 'prune', this.remoteName]);
|
|
205
186
|
}
|
|
206
|
-
catch (
|
|
187
|
+
catch (_error) {
|
|
207
188
|
// Non-critical operation - don't fail on error
|
|
208
189
|
}
|
|
209
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-merge-cleanup.js","sourceRoot":"","sources":["../src/post-merge-cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"post-merge-cleanup.js","sourceRoot":"","sources":["../src/post-merge-cleanup.ts"],"names":[],"mappings":"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"}
|
package/dist/tree-hash.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* git write-tree produces content-based hashes only (no timestamps).
|
|
12
12
|
*/
|
|
13
13
|
import { execSync } from 'child_process';
|
|
14
|
-
const GIT_TIMEOUT =
|
|
14
|
+
const GIT_TIMEOUT = 30000; // 30 seconds timeout for git operations
|
|
15
15
|
const GIT_OPTIONS = {
|
|
16
16
|
encoding: 'utf8',
|
|
17
17
|
timeout: GIT_TIMEOUT,
|
|
@@ -102,7 +102,7 @@ export async function hasWorkingTreeChanges() {
|
|
|
102
102
|
const headTreeHash = await getHeadTreeHash();
|
|
103
103
|
return workingTreeHash !== headTreeHash;
|
|
104
104
|
}
|
|
105
|
-
catch (
|
|
105
|
+
catch (_error) {
|
|
106
106
|
// If we can't determine, assume there are changes (safe default)
|
|
107
107
|
return true;
|
|
108
108
|
}
|
package/dist/tree-hash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-hash.js","sourceRoot":"","sources":["../src/tree-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"tree-hash.js","sourceRoot":"","sources":["../src/tree-hash.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED