gitgrip 0.3.1 → 0.4.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/README.md +44 -0
- package/assets/griptree-concept.svg +118 -0
- package/assets/griptree-workflow.svg +79 -0
- package/dist/commands/commit.d.ts +1 -0
- package/dist/commands/commit.d.ts.map +1 -1
- package/dist/commands/commit.js +19 -17
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/griptree.d.ts +27 -0
- package/dist/commands/griptree.d.ts.map +1 -0
- package/dist/commands/griptree.js +369 -0
- package/dist/commands/griptree.js.map +1 -0
- package/dist/commands/push.d.ts +1 -0
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +27 -21
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +11 -10
- package/dist/commands/sync.js.map +1 -1
- package/dist/index.js +61 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/git.d.ts +30 -1
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +50 -0
- package/dist/lib/git.js.map +1 -1
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { mkdir, rm, readdir, writeFile, readFile } from 'fs/promises';
|
|
5
|
+
import { loadManifest, getAllRepoInfo, getManifestRepoInfo } from '../lib/manifest.js';
|
|
6
|
+
import { pathExists, getGitInstance, isGitRepo } from '../lib/git.js';
|
|
7
|
+
const GRIPTREE_CONFIG_FILE = '.griptree';
|
|
8
|
+
/**
|
|
9
|
+
* Sanitize branch name for use as directory name
|
|
10
|
+
*/
|
|
11
|
+
function sanitizeBranchName(branch) {
|
|
12
|
+
return branch.replace(/\//g, '-');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get the default griptree path for a branch
|
|
16
|
+
*/
|
|
17
|
+
function getDefaultGriptreePath(rootDir, branch) {
|
|
18
|
+
const parentDir = path.dirname(rootDir);
|
|
19
|
+
const sanitized = sanitizeBranchName(branch);
|
|
20
|
+
return path.join(parentDir, sanitized);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Read griptree config from a directory
|
|
24
|
+
*/
|
|
25
|
+
async function readGriptreeConfig(griptreePath) {
|
|
26
|
+
const configPath = path.join(griptreePath, GRIPTREE_CONFIG_FILE);
|
|
27
|
+
try {
|
|
28
|
+
const content = await readFile(configPath, 'utf-8');
|
|
29
|
+
return JSON.parse(content);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Write griptree config to a directory
|
|
37
|
+
*/
|
|
38
|
+
async function writeGriptreeConfig(griptreePath, config) {
|
|
39
|
+
const configPath = path.join(griptreePath, GRIPTREE_CONFIG_FILE);
|
|
40
|
+
await writeFile(configPath, JSON.stringify(config, null, 2));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Find a griptree by branch name
|
|
44
|
+
*/
|
|
45
|
+
async function findGriptreeByBranch(rootDir, branch) {
|
|
46
|
+
const parentDir = path.dirname(rootDir);
|
|
47
|
+
try {
|
|
48
|
+
const entries = await readdir(parentDir, { withFileTypes: true });
|
|
49
|
+
for (const entry of entries) {
|
|
50
|
+
if (!entry.isDirectory())
|
|
51
|
+
continue;
|
|
52
|
+
const dirPath = path.join(parentDir, entry.name);
|
|
53
|
+
const config = await readGriptreeConfig(dirPath);
|
|
54
|
+
if (config && config.branch === branch) {
|
|
55
|
+
return { path: dirPath, config };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create a griptree (worktree-based workspace) for a branch
|
|
66
|
+
*/
|
|
67
|
+
export async function griptreeAdd(branch, options = {}) {
|
|
68
|
+
const { manifest, rootDir } = await loadManifest();
|
|
69
|
+
const repos = getAllRepoInfo(manifest, rootDir);
|
|
70
|
+
// Determine griptree path
|
|
71
|
+
const griptreePath = options.path
|
|
72
|
+
? path.resolve(options.path)
|
|
73
|
+
: getDefaultGriptreePath(rootDir, branch);
|
|
74
|
+
// Check if griptree already exists
|
|
75
|
+
if (await pathExists(griptreePath)) {
|
|
76
|
+
const config = await readGriptreeConfig(griptreePath);
|
|
77
|
+
if (config) {
|
|
78
|
+
console.error(chalk.red(`Griptree already exists at ${griptreePath} for branch '${config.branch}'`));
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
console.error(chalk.red(`Directory already exists: ${griptreePath}`));
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
console.log(chalk.blue(`Creating griptree for branch '${branch}' at ${griptreePath}\n`));
|
|
85
|
+
// Create griptree directory
|
|
86
|
+
await mkdir(griptreePath, { recursive: true });
|
|
87
|
+
// Create worktree for each repo in parallel
|
|
88
|
+
const repoResults = await Promise.all(repos.map(async (repo) => {
|
|
89
|
+
const worktreePath = path.join(griptreePath, repo.name);
|
|
90
|
+
const spinner = ora(`Creating worktree for ${repo.name}...`).start();
|
|
91
|
+
try {
|
|
92
|
+
// Check if repo exists
|
|
93
|
+
if (!await pathExists(repo.absolutePath)) {
|
|
94
|
+
spinner.warn(`${repo.name}: not cloned, skipping`);
|
|
95
|
+
return { repo, success: false, error: 'not cloned' };
|
|
96
|
+
}
|
|
97
|
+
const git = getGitInstance(repo.absolutePath);
|
|
98
|
+
// Check if branch exists locally or remotely
|
|
99
|
+
const branches = await git.branchLocal();
|
|
100
|
+
if (!branches.all.includes(branch)) {
|
|
101
|
+
// Try to fetch and create from remote
|
|
102
|
+
try {
|
|
103
|
+
await git.fetch('origin', branch);
|
|
104
|
+
await git.raw(['worktree', 'add', '-b', branch, worktreePath, `origin/${branch}`]);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Branch doesn't exist anywhere, create from current HEAD
|
|
108
|
+
await git.raw(['worktree', 'add', '-b', branch, worktreePath]);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// Branch exists locally
|
|
113
|
+
await git.raw(['worktree', 'add', worktreePath, branch]);
|
|
114
|
+
}
|
|
115
|
+
spinner.succeed(`${repo.name}: worktree created`);
|
|
116
|
+
return { repo, success: true };
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
120
|
+
// Check for common errors
|
|
121
|
+
if (errorMsg.includes('already checked out')) {
|
|
122
|
+
spinner.fail(`${repo.name}: branch '${branch}' is already checked out in another worktree`);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
spinner.fail(`${repo.name}: ${errorMsg}`);
|
|
126
|
+
}
|
|
127
|
+
return { repo, success: false, error: errorMsg };
|
|
128
|
+
}
|
|
129
|
+
}));
|
|
130
|
+
// Handle manifest repo if it exists
|
|
131
|
+
const manifestInfo = getManifestRepoInfo(manifest, rootDir);
|
|
132
|
+
if (manifestInfo && await isGitRepo(manifestInfo.absolutePath)) {
|
|
133
|
+
const manifestWorktreePath = path.join(griptreePath, '.gitgrip', 'manifests');
|
|
134
|
+
const spinner = ora('Creating worktree for manifest...').start();
|
|
135
|
+
try {
|
|
136
|
+
await mkdir(path.join(griptreePath, '.gitgrip'), { recursive: true });
|
|
137
|
+
const git = getGitInstance(manifestInfo.absolutePath);
|
|
138
|
+
const branches = await git.branchLocal();
|
|
139
|
+
if (!branches.all.includes(branch)) {
|
|
140
|
+
try {
|
|
141
|
+
await git.fetch('origin', branch);
|
|
142
|
+
await git.raw(['worktree', 'add', '-b', branch, manifestWorktreePath, `origin/${branch}`]);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
await git.raw(['worktree', 'add', '-b', branch, manifestWorktreePath]);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
await git.raw(['worktree', 'add', manifestWorktreePath, branch]);
|
|
150
|
+
}
|
|
151
|
+
spinner.succeed('manifest: worktree created');
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
155
|
+
if (errorMsg.includes('already checked out')) {
|
|
156
|
+
spinner.fail(`manifest: branch '${branch}' is already checked out in another worktree`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
spinner.fail(`manifest: ${errorMsg}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Write griptree config
|
|
164
|
+
await writeGriptreeConfig(griptreePath, {
|
|
165
|
+
branch,
|
|
166
|
+
locked: false,
|
|
167
|
+
createdAt: new Date().toISOString(),
|
|
168
|
+
});
|
|
169
|
+
// Summary
|
|
170
|
+
console.log('');
|
|
171
|
+
const succeeded = repoResults.filter(r => r.success).length;
|
|
172
|
+
const failed = repoResults.filter(r => !r.success).length;
|
|
173
|
+
if (failed === 0) {
|
|
174
|
+
console.log(chalk.green(`Griptree created successfully with ${succeeded} repo(s).`));
|
|
175
|
+
console.log(chalk.dim(`\nTo work in this griptree:\n cd ${griptreePath}`));
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
console.log(chalk.yellow(`Griptree created with ${succeeded} repo(s). ${failed} failed.`));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* List all griptrees in the workspace
|
|
183
|
+
*/
|
|
184
|
+
export async function griptreeList() {
|
|
185
|
+
const { rootDir } = await loadManifest();
|
|
186
|
+
const parentDir = path.dirname(rootDir);
|
|
187
|
+
// Find all directories that contain a .griptree config file
|
|
188
|
+
const griptrees = [];
|
|
189
|
+
try {
|
|
190
|
+
const entries = await readdir(parentDir, { withFileTypes: true });
|
|
191
|
+
for (const entry of entries) {
|
|
192
|
+
if (!entry.isDirectory())
|
|
193
|
+
continue;
|
|
194
|
+
const dirPath = path.join(parentDir, entry.name);
|
|
195
|
+
const config = await readGriptreeConfig(dirPath);
|
|
196
|
+
if (config) {
|
|
197
|
+
// Get repo info for this griptree
|
|
198
|
+
const repoInfos = [];
|
|
199
|
+
try {
|
|
200
|
+
const subentries = await readdir(dirPath, { withFileTypes: true });
|
|
201
|
+
for (const subentry of subentries) {
|
|
202
|
+
if (!subentry.isDirectory() || subentry.name.startsWith('.'))
|
|
203
|
+
continue;
|
|
204
|
+
const repoPath = path.join(dirPath, subentry.name);
|
|
205
|
+
const isRepo = await isGitRepo(repoPath);
|
|
206
|
+
if (isRepo) {
|
|
207
|
+
const git = getGitInstance(repoPath);
|
|
208
|
+
try {
|
|
209
|
+
const branch = (await git.revparse(['--abbrev-ref', 'HEAD'])).trim();
|
|
210
|
+
repoInfos.push({
|
|
211
|
+
name: subentry.name,
|
|
212
|
+
path: repoPath,
|
|
213
|
+
branch,
|
|
214
|
+
exists: true,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
repoInfos.push({
|
|
219
|
+
name: subentry.name,
|
|
220
|
+
path: repoPath,
|
|
221
|
+
branch: 'unknown',
|
|
222
|
+
exists: true,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
// Skip if we can't read the directory
|
|
230
|
+
}
|
|
231
|
+
griptrees.push({
|
|
232
|
+
branch: config.branch,
|
|
233
|
+
path: dirPath,
|
|
234
|
+
locked: config.locked,
|
|
235
|
+
repos: repoInfos,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
console.error(chalk.red(`Failed to list griptrees: ${error instanceof Error ? error.message : String(error)}`));
|
|
242
|
+
process.exit(1);
|
|
243
|
+
}
|
|
244
|
+
if (griptrees.length === 0) {
|
|
245
|
+
console.log(chalk.yellow('No griptrees found.'));
|
|
246
|
+
console.log(chalk.dim('\nCreate one with: gr griptree add <branch>'));
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
console.log(chalk.blue('Griptrees:\n'));
|
|
250
|
+
for (const griptree of griptrees) {
|
|
251
|
+
const lockIcon = griptree.locked ? chalk.yellow(' [locked]') : '';
|
|
252
|
+
console.log(chalk.bold(` ${griptree.branch}${lockIcon}`));
|
|
253
|
+
console.log(chalk.dim(` Path: ${griptree.path}`));
|
|
254
|
+
console.log(chalk.dim(` Repos: ${griptree.repos.length}`));
|
|
255
|
+
console.log('');
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Remove a griptree
|
|
260
|
+
*/
|
|
261
|
+
export async function griptreeRemove(branch, options = {}) {
|
|
262
|
+
const { manifest, rootDir } = await loadManifest();
|
|
263
|
+
const repos = getAllRepoInfo(manifest, rootDir);
|
|
264
|
+
// Find the griptree
|
|
265
|
+
const found = await findGriptreeByBranch(rootDir, branch);
|
|
266
|
+
if (!found) {
|
|
267
|
+
console.error(chalk.red(`Griptree for branch '${branch}' not found.`));
|
|
268
|
+
process.exit(1);
|
|
269
|
+
}
|
|
270
|
+
const { path: griptreePath, config } = found;
|
|
271
|
+
// Check if locked
|
|
272
|
+
if (config.locked && !options.force) {
|
|
273
|
+
console.error(chalk.red(`Griptree for branch '${branch}' is locked.`));
|
|
274
|
+
console.log(chalk.dim('Use --force to remove anyway, or unlock first with: gr griptree unlock ' + branch));
|
|
275
|
+
process.exit(1);
|
|
276
|
+
}
|
|
277
|
+
console.log(chalk.blue(`Removing griptree for branch '${branch}' at ${griptreePath}\n`));
|
|
278
|
+
// Remove worktrees from each repo in parallel
|
|
279
|
+
const results = await Promise.all(repos.map(async (repo) => {
|
|
280
|
+
const worktreePath = path.join(griptreePath, repo.name);
|
|
281
|
+
const spinner = ora(`Removing worktree for ${repo.name}...`).start();
|
|
282
|
+
try {
|
|
283
|
+
if (!await pathExists(repo.absolutePath)) {
|
|
284
|
+
spinner.warn(`${repo.name}: main repo not found, skipping`);
|
|
285
|
+
return { repo, success: true };
|
|
286
|
+
}
|
|
287
|
+
if (!await pathExists(worktreePath)) {
|
|
288
|
+
spinner.succeed(`${repo.name}: worktree not found, skipping`);
|
|
289
|
+
return { repo, success: true };
|
|
290
|
+
}
|
|
291
|
+
const git = getGitInstance(repo.absolutePath);
|
|
292
|
+
await git.raw(['worktree', 'remove', worktreePath, '--force']);
|
|
293
|
+
spinner.succeed(`${repo.name}: worktree removed`);
|
|
294
|
+
return { repo, success: true };
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
298
|
+
spinner.fail(`${repo.name}: ${errorMsg}`);
|
|
299
|
+
return { repo, success: false, error: errorMsg };
|
|
300
|
+
}
|
|
301
|
+
}));
|
|
302
|
+
// Remove manifest worktree
|
|
303
|
+
const manifestInfo = getManifestRepoInfo(manifest, rootDir);
|
|
304
|
+
if (manifestInfo && await isGitRepo(manifestInfo.absolutePath)) {
|
|
305
|
+
const manifestWorktreePath = path.join(griptreePath, '.gitgrip', 'manifests');
|
|
306
|
+
const spinner = ora('Removing worktree for manifest...').start();
|
|
307
|
+
try {
|
|
308
|
+
if (await pathExists(manifestWorktreePath)) {
|
|
309
|
+
const git = getGitInstance(manifestInfo.absolutePath);
|
|
310
|
+
await git.raw(['worktree', 'remove', manifestWorktreePath, '--force']);
|
|
311
|
+
spinner.succeed('manifest: worktree removed');
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
spinner.succeed('manifest: worktree not found, skipping');
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
319
|
+
spinner.fail(`manifest: ${errorMsg}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Remove the griptree directory
|
|
323
|
+
try {
|
|
324
|
+
await rm(griptreePath, { recursive: true, force: true });
|
|
325
|
+
console.log(chalk.green(`\nGriptree for branch '${branch}' removed successfully.`));
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
console.error(chalk.red(`Failed to remove griptree directory: ${error instanceof Error ? error.message : String(error)}`));
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Lock a griptree to prevent accidental removal
|
|
333
|
+
*/
|
|
334
|
+
export async function griptreeLock(branch) {
|
|
335
|
+
const { rootDir } = await loadManifest();
|
|
336
|
+
const found = await findGriptreeByBranch(rootDir, branch);
|
|
337
|
+
if (!found) {
|
|
338
|
+
console.error(chalk.red(`Griptree for branch '${branch}' not found.`));
|
|
339
|
+
process.exit(1);
|
|
340
|
+
}
|
|
341
|
+
const { path: griptreePath, config } = found;
|
|
342
|
+
if (config.locked) {
|
|
343
|
+
console.log(chalk.yellow(`Griptree for branch '${branch}' is already locked.`));
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
config.locked = true;
|
|
347
|
+
await writeGriptreeConfig(griptreePath, config);
|
|
348
|
+
console.log(chalk.green(`Griptree for branch '${branch}' is now locked.`));
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Unlock a griptree
|
|
352
|
+
*/
|
|
353
|
+
export async function griptreeUnlock(branch) {
|
|
354
|
+
const { rootDir } = await loadManifest();
|
|
355
|
+
const found = await findGriptreeByBranch(rootDir, branch);
|
|
356
|
+
if (!found) {
|
|
357
|
+
console.error(chalk.red(`Griptree for branch '${branch}' not found.`));
|
|
358
|
+
process.exit(1);
|
|
359
|
+
}
|
|
360
|
+
const { path: griptreePath, config } = found;
|
|
361
|
+
if (!config.locked) {
|
|
362
|
+
console.log(chalk.yellow(`Griptree for branch '${branch}' is not locked.`));
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
config.locked = false;
|
|
366
|
+
await writeGriptreeConfig(griptreePath, config);
|
|
367
|
+
console.log(chalk.green(`Griptree for branch '${branch}' is now unlocked.`));
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=griptree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"griptree.js","sourceRoot":"","sources":["../../src/commands/griptree.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/push.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAMA,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAMA,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA6CD;;;GAGG;AACH,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFnE"}
|
package/dist/commands/push.js
CHANGED
|
@@ -32,6 +32,7 @@ async function hasUpstream(repoPath) {
|
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Push current branch to remote across all repositories
|
|
35
|
+
* Uses two-phase parallel approach for better performance
|
|
35
36
|
*/
|
|
36
37
|
export async function push(options = {}) {
|
|
37
38
|
const { setUpstream = false, force = false } = options;
|
|
@@ -42,24 +43,33 @@ export async function push(options = {}) {
|
|
|
42
43
|
if (manifestInfo && await isGitRepo(manifestInfo.absolutePath)) {
|
|
43
44
|
repos = [...repos, manifestInfo];
|
|
44
45
|
}
|
|
45
|
-
const results = [];
|
|
46
|
-
let hasCommits = false;
|
|
47
46
|
console.log(chalk.blue('Checking repositories for commits to push...\n'));
|
|
48
|
-
|
|
47
|
+
// Phase 1: Gather info in parallel
|
|
48
|
+
const repoInfoResults = await Promise.all(repos.map(async (repo) => {
|
|
49
49
|
const exists = await pathExists(repo.absolutePath);
|
|
50
50
|
if (!exists) {
|
|
51
|
-
|
|
51
|
+
return null;
|
|
52
52
|
}
|
|
53
|
-
const branch = await
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
53
|
+
const [branch, hasUpstreamConfigured, needsPush] = await Promise.all([
|
|
54
|
+
getCurrentBranch(repo.absolutePath),
|
|
55
|
+
hasUpstream(repo.absolutePath),
|
|
56
|
+
hasCommitsAheadOfRemote(repo.absolutePath),
|
|
57
|
+
]);
|
|
58
|
+
return { repo, branch, hasUpstreamConfigured, needsPush };
|
|
59
|
+
}));
|
|
60
|
+
// Filter out null results and repos that don't need pushing
|
|
61
|
+
const reposToPush = repoInfoResults.filter((info) => {
|
|
62
|
+
if (!info)
|
|
63
|
+
return false;
|
|
64
|
+
const needsUpstreamPush = !info.hasUpstreamConfigured && setUpstream;
|
|
65
|
+
return info.needsPush || needsUpstreamPush;
|
|
66
|
+
});
|
|
67
|
+
if (reposToPush.length === 0) {
|
|
68
|
+
console.log(chalk.yellow('No commits to push in any repository.'));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// Phase 2: Push repos in parallel
|
|
72
|
+
const results = await Promise.all(reposToPush.map(async ({ repo, branch, hasUpstreamConfigured }) => {
|
|
63
73
|
const spinner = ora(`Pushing ${repo.name} (${branch})...`).start();
|
|
64
74
|
try {
|
|
65
75
|
const git = getGitInstance(repo.absolutePath);
|
|
@@ -75,18 +85,14 @@ export async function push(options = {}) {
|
|
|
75
85
|
}
|
|
76
86
|
await git.push(pushOptions);
|
|
77
87
|
spinner.succeed(`${repo.name} (${chalk.cyan(branch)}): pushed`);
|
|
78
|
-
|
|
88
|
+
return { repo, success: true, pushed: true, branch };
|
|
79
89
|
}
|
|
80
90
|
catch (error) {
|
|
81
91
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
82
92
|
spinner.fail(`${repo.name}: ${errorMsg}`);
|
|
83
|
-
|
|
93
|
+
return { repo, success: false, pushed: false, branch, error: errorMsg };
|
|
84
94
|
}
|
|
85
|
-
}
|
|
86
|
-
if (!hasCommits) {
|
|
87
|
-
console.log(chalk.yellow('No commits to push in any repository.'));
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
95
|
+
}));
|
|
90
96
|
// Summary
|
|
91
97
|
console.log('');
|
|
92
98
|
const pushed = results.filter((r) => r.pushed).length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAc,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAgBpG;;GAEG;AACH,KAAK,UAAU,uBAAuB,CAAC,QAAgB;IACrD,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,QAAgB;IACzC,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,MAAM,SAAS,CAAC,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AASA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AASA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoMnE"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -69,13 +69,12 @@ export async function sync(options = {}) {
|
|
|
69
69
|
const repos = getAllRepoInfo(updatedManifest, rootDir);
|
|
70
70
|
console.log(chalk.blue(`\nSyncing ${repos.length} repositories...\n`));
|
|
71
71
|
timing?.startPhase('sync repos');
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
// Sync all repos in parallel for better performance
|
|
73
|
+
const results = await Promise.all(repos.map(async (repo) => {
|
|
74
74
|
const exists = await pathExists(repo.absolutePath);
|
|
75
75
|
if (!exists) {
|
|
76
76
|
console.log(chalk.yellow(` ${repo.name}: not cloned (run 'gitgrip init <url>')`));
|
|
77
|
-
|
|
78
|
-
continue;
|
|
77
|
+
return { repo, success: false, error: 'not cloned' };
|
|
79
78
|
}
|
|
80
79
|
const spinner = ora(`${options.fetch ? 'Fetching' : 'Pulling'} ${repo.name}...`).start();
|
|
81
80
|
timing?.startPhase(repo.name);
|
|
@@ -89,27 +88,29 @@ export async function sync(options = {}) {
|
|
|
89
88
|
await pullLatest(repo.absolutePath);
|
|
90
89
|
spinner.succeed(`${repo.name} (${chalk.cyan(branch)}): pulled`);
|
|
91
90
|
}
|
|
92
|
-
results.push({ repo, success: true, branch });
|
|
93
91
|
timing?.endPhase(repo.name);
|
|
92
|
+
return { repo, success: true, branch };
|
|
94
93
|
}
|
|
95
94
|
catch (error) {
|
|
96
95
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
97
96
|
// Check for common errors
|
|
98
97
|
if (errorMsg.includes('uncommitted changes')) {
|
|
99
98
|
spinner.warn(`${repo.name}: has uncommitted changes, skipping`);
|
|
100
|
-
|
|
99
|
+
timing?.endPhase(repo.name);
|
|
100
|
+
return { repo, success: false, error: 'uncommitted changes' };
|
|
101
101
|
}
|
|
102
102
|
else if (errorMsg.includes('diverged')) {
|
|
103
103
|
spinner.warn(`${repo.name}: branch has diverged from remote`);
|
|
104
|
-
|
|
104
|
+
timing?.endPhase(repo.name);
|
|
105
|
+
return { repo, success: false, error: 'diverged' };
|
|
105
106
|
}
|
|
106
107
|
else {
|
|
107
108
|
spinner.fail(`${repo.name}: ${errorMsg}`);
|
|
108
|
-
|
|
109
|
+
timing?.endPhase(repo.name);
|
|
110
|
+
return { repo, success: false, error: errorMsg };
|
|
109
111
|
}
|
|
110
|
-
timing?.endPhase(repo.name);
|
|
111
112
|
}
|
|
112
|
-
}
|
|
113
|
+
}));
|
|
113
114
|
timing?.endPhase('sync repos');
|
|
114
115
|
// Summary
|
|
115
116
|
console.log('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|