gitgrip 0.2.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/LICENSE +21 -0
- package/README.md +211 -0
- package/actions/cross-repo-sync/action.yml +55 -0
- package/assets/banner.svg +73 -0
- package/assets/icon.svg +30 -0
- package/assets/logo-dark.svg +36 -0
- package/assets/logo.svg +36 -0
- package/dist/commands/add.d.ts +9 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +80 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/bench.d.ts +12 -0
- package/dist/commands/bench.d.ts.map +1 -0
- package/dist/commands/bench.js +136 -0
- package/dist/commands/bench.js.map +1 -0
- package/dist/commands/branch.d.ts +15 -0
- package/dist/commands/branch.d.ts.map +1 -0
- package/dist/commands/branch.js +159 -0
- package/dist/commands/branch.js.map +1 -0
- package/dist/commands/checkout.d.ts +10 -0
- package/dist/commands/checkout.d.ts.map +1 -0
- package/dist/commands/checkout.js +85 -0
- package/dist/commands/checkout.js.map +1 -0
- package/dist/commands/commit.d.ts +10 -0
- package/dist/commands/commit.d.ts.map +1 -0
- package/dist/commands/commit.js +94 -0
- package/dist/commands/commit.js.map +1 -0
- package/dist/commands/diff.d.ts +11 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +105 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/env.d.ts +8 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +35 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/forall.d.ts +13 -0
- package/dist/commands/forall.d.ts.map +1 -0
- package/dist/commands/forall.js +116 -0
- package/dist/commands/forall.js.map +1 -0
- package/dist/commands/init.d.ts +15 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +106 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +11 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +205 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/migrate.d.ts +17 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +180 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/pr/create.d.ts +13 -0
- package/dist/commands/pr/create.d.ts.map +1 -0
- package/dist/commands/pr/create.js +202 -0
- package/dist/commands/pr/create.js.map +1 -0
- package/dist/commands/pr/index.d.ts +4 -0
- package/dist/commands/pr/index.d.ts.map +1 -0
- package/dist/commands/pr/index.js +4 -0
- package/dist/commands/pr/index.js.map +1 -0
- package/dist/commands/pr/merge.d.ts +11 -0
- package/dist/commands/pr/merge.d.ts.map +1 -0
- package/dist/commands/pr/merge.js +168 -0
- package/dist/commands/pr/merge.js.map +1 -0
- package/dist/commands/pr/status.d.ts +9 -0
- package/dist/commands/pr/status.d.ts.map +1 -0
- package/dist/commands/pr/status.js +139 -0
- package/dist/commands/pr/status.js.map +1 -0
- package/dist/commands/push.d.ts +10 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +101 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/run.d.ts +8 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +75 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +201 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts +13 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +183 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +352 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/__bench__/files.bench.d.ts +2 -0
- package/dist/lib/__bench__/files.bench.d.ts.map +1 -0
- package/dist/lib/__bench__/files.bench.js +52 -0
- package/dist/lib/__bench__/files.bench.js.map +1 -0
- package/dist/lib/__bench__/manifest.bench.d.ts +2 -0
- package/dist/lib/__bench__/manifest.bench.d.ts.map +1 -0
- package/dist/lib/__bench__/manifest.bench.js +74 -0
- package/dist/lib/__bench__/manifest.bench.js.map +1 -0
- package/dist/lib/files.d.ts +84 -0
- package/dist/lib/files.d.ts.map +1 -0
- package/dist/lib/files.js +492 -0
- package/dist/lib/files.js.map +1 -0
- package/dist/lib/git.d.ts +125 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +370 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/github.d.ts +92 -0
- package/dist/lib/github.d.ts.map +1 -0
- package/dist/lib/github.js +284 -0
- package/dist/lib/github.js.map +1 -0
- package/dist/lib/hooks.d.ts +19 -0
- package/dist/lib/hooks.d.ts.map +1 -0
- package/dist/lib/hooks.js +63 -0
- package/dist/lib/hooks.js.map +1 -0
- package/dist/lib/linker.d.ts +56 -0
- package/dist/lib/linker.d.ts.map +1 -0
- package/dist/lib/linker.js +185 -0
- package/dist/lib/linker.js.map +1 -0
- package/dist/lib/manifest.d.ts +73 -0
- package/dist/lib/manifest.d.ts.map +1 -0
- package/dist/lib/manifest.js +400 -0
- package/dist/lib/manifest.js.map +1 -0
- package/dist/lib/scripts.d.ts +26 -0
- package/dist/lib/scripts.d.ts.map +1 -0
- package/dist/lib/scripts.js +123 -0
- package/dist/lib/scripts.js.map +1 -0
- package/dist/lib/timing.d.ts +100 -0
- package/dist/lib/timing.d.ts.map +1 -0
- package/dist/lib/timing.js +293 -0
- package/dist/lib/timing.js.map +1 -0
- package/dist/types.d.ts +312 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { loadManifest, getAllRepoInfo, getManifestsDir } from '../lib/manifest.js';
|
|
3
|
+
import { getAllRepoStatus, branchExists, pathExists } from '../lib/git.js';
|
|
4
|
+
import { getAllLinkStatus } from '../lib/files.js';
|
|
5
|
+
import { runBenchmark, formatBenchmarkResults } from '../lib/timing.js';
|
|
6
|
+
/**
|
|
7
|
+
* Available benchmark operations
|
|
8
|
+
*/
|
|
9
|
+
const BENCHMARKS = {
|
|
10
|
+
'manifest-load': {
|
|
11
|
+
description: 'Load and parse manifest',
|
|
12
|
+
fn: async () => {
|
|
13
|
+
await loadManifest();
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
status: {
|
|
17
|
+
description: 'Full status check',
|
|
18
|
+
fn: async () => {
|
|
19
|
+
const { manifest, rootDir } = await loadManifest();
|
|
20
|
+
const repos = getAllRepoInfo(manifest, rootDir);
|
|
21
|
+
await getAllRepoStatus(repos);
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
'link-status': {
|
|
25
|
+
description: 'Check link status',
|
|
26
|
+
fn: async () => {
|
|
27
|
+
const { manifest, rootDir } = await loadManifest();
|
|
28
|
+
const manifestsDir = getManifestsDir(rootDir);
|
|
29
|
+
await getAllLinkStatus(manifest, rootDir, manifestsDir);
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
'branch-check': {
|
|
33
|
+
description: 'Check branch existence',
|
|
34
|
+
fn: async () => {
|
|
35
|
+
const { manifest, rootDir } = await loadManifest();
|
|
36
|
+
const repos = getAllRepoInfo(manifest, rootDir);
|
|
37
|
+
for (const repo of repos) {
|
|
38
|
+
if (await pathExists(repo.absolutePath)) {
|
|
39
|
+
await branchExists(repo.absolutePath, repo.default_branch);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* List available benchmarks
|
|
47
|
+
*/
|
|
48
|
+
function listBenchmarks() {
|
|
49
|
+
console.log(chalk.blue('Available Benchmarks\n'));
|
|
50
|
+
const maxNameLen = Math.max(...Object.keys(BENCHMARKS).map((k) => k.length));
|
|
51
|
+
for (const [name, { description }] of Object.entries(BENCHMARKS)) {
|
|
52
|
+
console.log(` ${chalk.cyan(name.padEnd(maxNameLen))} ${description}`);
|
|
53
|
+
}
|
|
54
|
+
console.log('');
|
|
55
|
+
console.log(chalk.dim('Run a specific benchmark:'));
|
|
56
|
+
console.log(chalk.dim(' cr bench manifest-load'));
|
|
57
|
+
console.log(chalk.dim(' cr bench status -n 10'));
|
|
58
|
+
console.log('');
|
|
59
|
+
console.log(chalk.dim('Run all benchmarks:'));
|
|
60
|
+
console.log(chalk.dim(' cr bench'));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Run a single benchmark
|
|
64
|
+
*/
|
|
65
|
+
async function runSingleBenchmark(name, options) {
|
|
66
|
+
const benchmark = BENCHMARKS[name];
|
|
67
|
+
if (!benchmark) {
|
|
68
|
+
throw new Error(`Unknown benchmark: ${name}. Use --list to see available benchmarks.`);
|
|
69
|
+
}
|
|
70
|
+
return runBenchmark(name, benchmark.fn, options);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Benchmark workspace operations
|
|
74
|
+
*/
|
|
75
|
+
export async function bench(operation, options = {}) {
|
|
76
|
+
const { list = false, iterations = 5, warmup = 1, json = false } = options;
|
|
77
|
+
// List mode
|
|
78
|
+
if (list) {
|
|
79
|
+
listBenchmarks();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Check if we're in a workspace
|
|
83
|
+
try {
|
|
84
|
+
await loadManifest();
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
console.log(chalk.yellow('Not in a gitgrip workspace.'));
|
|
88
|
+
console.log(chalk.dim('Run `gitgrip init <manifest-url>` first.'));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const results = [];
|
|
92
|
+
if (operation) {
|
|
93
|
+
// Run single benchmark
|
|
94
|
+
if (!json) {
|
|
95
|
+
console.log(chalk.blue(`Running benchmark: ${operation}\n`));
|
|
96
|
+
console.log(chalk.dim(`Iterations: ${iterations}, Warmup: ${warmup}\n`));
|
|
97
|
+
}
|
|
98
|
+
const result = await runSingleBenchmark(operation, { iterations, warmup });
|
|
99
|
+
results.push(result);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// Run all benchmarks
|
|
103
|
+
if (!json) {
|
|
104
|
+
console.log(chalk.blue('Running all benchmarks\n'));
|
|
105
|
+
console.log(chalk.dim(`Iterations: ${iterations}, Warmup: ${warmup}\n`));
|
|
106
|
+
}
|
|
107
|
+
for (const name of Object.keys(BENCHMARKS)) {
|
|
108
|
+
if (!json) {
|
|
109
|
+
process.stdout.write(` ${name}...`);
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
const result = await runSingleBenchmark(name, { iterations, warmup });
|
|
113
|
+
results.push(result);
|
|
114
|
+
if (!json) {
|
|
115
|
+
console.log(chalk.green(' done'));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
if (!json) {
|
|
120
|
+
console.log(chalk.red(` failed: ${error instanceof Error ? error.message : String(error)}`));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!json) {
|
|
125
|
+
console.log('');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Output results
|
|
129
|
+
if (json) {
|
|
130
|
+
console.log(JSON.stringify(results, null, 2));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(formatBenchmarkResults(results));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=bench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bench.js","sourceRoot":"","sources":["../../src/commands/bench.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface BranchOptions {
|
|
2
|
+
create?: boolean;
|
|
3
|
+
repo?: string[];
|
|
4
|
+
includeManifest?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Create or checkout a branch across all repositories
|
|
8
|
+
*/
|
|
9
|
+
export declare function branch(branchName: string, options?: BranchOptions): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* List branches across all repositories
|
|
12
|
+
*/
|
|
13
|
+
export declare function listBranches(): Promise<void>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=branch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../src/commands/branch.ts"],"names":[],"mappings":"AAgBA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsJ3F;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAelD"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { loadManifest, getAllRepoInfo, getManifestRepoInfo } from '../lib/manifest.js';
|
|
4
|
+
import { createBranchInAllRepos, checkoutBranchInAllRepos, pathExists, branchExists, getCurrentBranch, hasUncommittedChanges, isGitRepo, createBranch, checkoutBranch, } from '../lib/git.js';
|
|
5
|
+
/**
|
|
6
|
+
* Create or checkout a branch across all repositories
|
|
7
|
+
*/
|
|
8
|
+
export async function branch(branchName, options = {}) {
|
|
9
|
+
const { manifest, rootDir } = await loadManifest();
|
|
10
|
+
let repos = getAllRepoInfo(manifest, rootDir);
|
|
11
|
+
// Filter by --repo flag if specified
|
|
12
|
+
if (options.repo && options.repo.length > 0) {
|
|
13
|
+
const requestedRepos = new Set(options.repo);
|
|
14
|
+
const filteredRepos = repos.filter((r) => requestedRepos.has(r.name));
|
|
15
|
+
// Check for unknown repo names
|
|
16
|
+
const knownNames = new Set(repos.map((r) => r.name));
|
|
17
|
+
const unknownRepos = options.repo.filter((name) => !knownNames.has(name));
|
|
18
|
+
if (unknownRepos.length > 0) {
|
|
19
|
+
console.log(chalk.yellow(`Unknown repositories: ${unknownRepos.join(', ')}`));
|
|
20
|
+
console.log(chalk.dim(`Available: ${repos.map((r) => r.name).join(', ')}\n`));
|
|
21
|
+
}
|
|
22
|
+
repos = filteredRepos;
|
|
23
|
+
if (repos.length === 0) {
|
|
24
|
+
console.log(chalk.red('No valid repositories specified.'));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Filter to cloned repos only
|
|
29
|
+
const clonedRepos = [];
|
|
30
|
+
for (const repo of repos) {
|
|
31
|
+
if (await pathExists(repo.absolutePath)) {
|
|
32
|
+
clonedRepos.push(repo);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (clonedRepos.length === 0) {
|
|
36
|
+
console.log(chalk.yellow('No repositories are cloned. Run `gitgrip init --clone` first.'));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const notCloned = repos.length - clonedRepos.length;
|
|
40
|
+
if (notCloned > 0) {
|
|
41
|
+
console.log(chalk.dim(`Skipping ${notCloned} uncloned repositories\n`));
|
|
42
|
+
}
|
|
43
|
+
// Check if we should create or checkout
|
|
44
|
+
let shouldCreate = options.create;
|
|
45
|
+
if (!shouldCreate) {
|
|
46
|
+
// Check if branch exists in any repo
|
|
47
|
+
const branchExistsResults = await Promise.all(clonedRepos.map(async (repo) => ({
|
|
48
|
+
repo,
|
|
49
|
+
exists: await branchExists(repo.absolutePath, branchName),
|
|
50
|
+
})));
|
|
51
|
+
const existingCount = branchExistsResults.filter((r) => r.exists).length;
|
|
52
|
+
if (existingCount === 0) {
|
|
53
|
+
// Branch doesn't exist anywhere, create it
|
|
54
|
+
shouldCreate = true;
|
|
55
|
+
}
|
|
56
|
+
else if (existingCount < clonedRepos.length) {
|
|
57
|
+
// Branch exists in some repos but not all
|
|
58
|
+
console.log(chalk.yellow(`Branch '${branchName}' exists in ${existingCount}/${clonedRepos.length} repos`));
|
|
59
|
+
console.log(chalk.dim('Creating in remaining repos...\n'));
|
|
60
|
+
// Create in repos where it doesn't exist, checkout where it does
|
|
61
|
+
for (const { repo, exists } of branchExistsResults) {
|
|
62
|
+
const spinner = ora(`${repo.name}...`).start();
|
|
63
|
+
try {
|
|
64
|
+
if (exists) {
|
|
65
|
+
const { checkoutBranch } = await import('../lib/git.js');
|
|
66
|
+
await checkoutBranch(repo.absolutePath, branchName);
|
|
67
|
+
spinner.succeed(`${repo.name}: switched to ${branchName}`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const { createBranch } = await import('../lib/git.js');
|
|
71
|
+
await createBranch(repo.absolutePath, branchName);
|
|
72
|
+
spinner.succeed(`${repo.name}: created ${branchName}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
spinner.fail(`${repo.name}: ${error instanceof Error ? error.message : error}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (shouldCreate) {
|
|
83
|
+
console.log(chalk.blue(`Creating branch '${branchName}' in ${clonedRepos.length} repos...\n`));
|
|
84
|
+
const results = await createBranchInAllRepos(clonedRepos, branchName);
|
|
85
|
+
for (const result of results) {
|
|
86
|
+
if (result.success) {
|
|
87
|
+
console.log(chalk.green(` ✓ ${result.repoName}: created`));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// Check if error is "branch already exists"
|
|
91
|
+
if (result.error?.includes('already exists')) {
|
|
92
|
+
console.log(chalk.yellow(` - ${result.repoName}: branch already exists`));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(chalk.red(` ✗ ${result.repoName}: ${result.error}`));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
console.log(chalk.blue(`Checking out branch '${branchName}' in ${clonedRepos.length} repos...\n`));
|
|
102
|
+
const results = await checkoutBranchInAllRepos(clonedRepos, branchName);
|
|
103
|
+
for (const result of results) {
|
|
104
|
+
if (result.success) {
|
|
105
|
+
console.log(chalk.green(` ✓ ${result.repoName}: switched`));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.log(chalk.red(` ✗ ${result.repoName}: ${result.error}`));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Handle manifest repo if configured
|
|
113
|
+
const manifestInfo = getManifestRepoInfo(manifest, rootDir);
|
|
114
|
+
if (manifestInfo && await isGitRepo(manifestInfo.absolutePath)) {
|
|
115
|
+
const manifestHasChanges = await hasUncommittedChanges(manifestInfo.absolutePath);
|
|
116
|
+
const shouldIncludeManifest = options.includeManifest || manifestHasChanges;
|
|
117
|
+
if (shouldIncludeManifest) {
|
|
118
|
+
const manifestBranchExists = await branchExists(manifestInfo.absolutePath, branchName);
|
|
119
|
+
const spinner = ora(`${manifestInfo.name}...`).start();
|
|
120
|
+
try {
|
|
121
|
+
if (shouldCreate && !manifestBranchExists) {
|
|
122
|
+
await createBranch(manifestInfo.absolutePath, branchName);
|
|
123
|
+
spinner.succeed(`${manifestInfo.name}: created ${branchName}`);
|
|
124
|
+
}
|
|
125
|
+
else if (manifestBranchExists) {
|
|
126
|
+
await checkoutBranch(manifestInfo.absolutePath, branchName);
|
|
127
|
+
spinner.succeed(`${manifestInfo.name}: switched to ${branchName}`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
await createBranch(manifestInfo.absolutePath, branchName);
|
|
131
|
+
spinner.succeed(`${manifestInfo.name}: created ${branchName}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
spinner.fail(`${manifestInfo.name}: ${error instanceof Error ? error.message : error}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Summary
|
|
140
|
+
console.log('');
|
|
141
|
+
console.log(chalk.dim(`All repos now on branch: ${branchName}`));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* List branches across all repositories
|
|
145
|
+
*/
|
|
146
|
+
export async function listBranches() {
|
|
147
|
+
const { manifest, rootDir } = await loadManifest();
|
|
148
|
+
const repos = getAllRepoInfo(manifest, rootDir);
|
|
149
|
+
console.log(chalk.blue('Current branches:\n'));
|
|
150
|
+
for (const repo of repos) {
|
|
151
|
+
if (!(await pathExists(repo.absolutePath))) {
|
|
152
|
+
console.log(` ${chalk.dim(repo.name)}: ${chalk.dim('not cloned')}`);
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
const currentBranch = await getCurrentBranch(repo.absolutePath);
|
|
156
|
+
console.log(` ${chalk.bold(repo.name)}: ${chalk.cyan(currentBranch)}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../src/commands/branch.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,EACL,sBAAsB,EACtB,wBAAwB,EACxB,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,SAAS,EACT,YAAY,EACZ,cAAc,GACf,MAAM,eAAe,CAAC;AASvB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAkB,EAAE,UAAyB,EAAE;IAC1E,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;IACnD,IAAI,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE9C,qCAAqC;IACrC,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtE,+BAA+B;QAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,KAAK,GAAG,aAAa,CAAC;QACtB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,WAAW,GAAe,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACxC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+DAA+D,CAAC,CAAC,CAAC;QAC3F,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IACpD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,SAAS,0BAA0B,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,wCAAwC;IACxC,IAAI,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAElC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,qCAAqC;QACrC,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC3C,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI;YACJ,MAAM,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC;SAC1D,CAAC,CAAC,CACJ,CAAC;QAEF,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QAEzE,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;YACxB,2CAA2C;YAC3C,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,IAAI,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;YAC9C,0CAA0C;YAC1C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,WAAW,UAAU,eAAe,aAAa,IAAI,WAAW,CAAC,MAAM,QAAQ,CAChF,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAE3D,iEAAiE;YACjE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,mBAAmB,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC/C,IAAI,CAAC;oBACH,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;wBACzD,MAAM,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;wBACpD,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,iBAAiB,UAAU,EAAE,CAAC,CAAC;oBAC7D,CAAC;yBAAM,CAAC;wBACN,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;wBACvD,MAAM,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;wBAClD,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,aAAa,UAAU,EAAE,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,UAAU,QAAQ,WAAW,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAEtE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,QAAQ,WAAW,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,4CAA4C;gBAC5C,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,QAAQ,yBAAyB,CAAC,CAAC,CAAC;gBAC7E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,wBAAwB,UAAU,QAAQ,WAAW,CAAC,MAAM,aAAa,CAAC,CACtF,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAExE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,QAAQ,YAAY,CAAC,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,YAAY,IAAI,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/D,MAAM,kBAAkB,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAClF,MAAM,qBAAqB,GAAG,OAAO,CAAC,eAAe,IAAI,kBAAkB,CAAC;QAE5E,IAAI,qBAAqB,EAAE,CAAC;YAC1B,MAAM,oBAAoB,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACvF,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAEvD,IAAI,CAAC;gBACH,IAAI,YAAY,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC1C,MAAM,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;oBAC1D,OAAO,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,IAAI,aAAa,UAAU,EAAE,CAAC,CAAC;gBACjE,CAAC;qBAAM,IAAI,oBAAoB,EAAE,CAAC;oBAChC,MAAM,cAAc,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;oBAC5D,OAAO,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,IAAI,iBAAiB,UAAU,EAAE,CAAC,CAAC;gBACrE,CAAC;qBAAM,CAAC;oBACN,MAAM,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;oBAC1D,OAAO,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,IAAI,aAAa,UAAU,EAAE,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;IACH,CAAC;IAED,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEhD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACrE,SAAS;QACX,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface CheckoutOptions {
|
|
2
|
+
create?: boolean;
|
|
3
|
+
noHooks?: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Checkout a branch across all repositories
|
|
7
|
+
*/
|
|
8
|
+
export declare function checkout(branchName: string, options?: CheckoutOptions): Promise<void>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=checkout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"AAOA,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F/F"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { loadManifest, getAllRepoInfo } from '../lib/manifest.js';
|
|
3
|
+
import { checkoutBranchInAllRepos, pathExists, branchExists } from '../lib/git.js';
|
|
4
|
+
import { runHooks } from '../lib/hooks.js';
|
|
5
|
+
/**
|
|
6
|
+
* Checkout a branch across all repositories
|
|
7
|
+
*/
|
|
8
|
+
export async function checkout(branchName, options = {}) {
|
|
9
|
+
const { manifest, rootDir } = await loadManifest();
|
|
10
|
+
const repos = getAllRepoInfo(manifest, rootDir);
|
|
11
|
+
// Filter to cloned repos only
|
|
12
|
+
const clonedRepos = [];
|
|
13
|
+
for (const repo of repos) {
|
|
14
|
+
if (await pathExists(repo.absolutePath)) {
|
|
15
|
+
clonedRepos.push(repo);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
if (clonedRepos.length === 0) {
|
|
19
|
+
console.log(chalk.yellow('No repositories are cloned. Run `gitgrip init --clone` first.'));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// If -b flag, create and checkout
|
|
23
|
+
if (options.create) {
|
|
24
|
+
const { branch } = await import('./branch.js');
|
|
25
|
+
await branch(branchName, { create: true });
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Check which repos have the branch
|
|
29
|
+
const branchCheck = await Promise.all(clonedRepos.map(async (repo) => ({
|
|
30
|
+
repo,
|
|
31
|
+
exists: await branchExists(repo.absolutePath, branchName),
|
|
32
|
+
})));
|
|
33
|
+
const missing = branchCheck.filter((r) => !r.exists);
|
|
34
|
+
if (missing.length > 0) {
|
|
35
|
+
console.log(chalk.yellow(`Branch '${branchName}' doesn't exist in ${missing.length} repos:`));
|
|
36
|
+
for (const { repo } of missing) {
|
|
37
|
+
console.log(chalk.dim(` - ${repo.name}`));
|
|
38
|
+
}
|
|
39
|
+
console.log('');
|
|
40
|
+
console.log(chalk.dim(`Use 'gitgrip branch ${branchName}' to create it everywhere.`));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
console.log(chalk.blue(`Checking out '${branchName}' in ${clonedRepos.length} repos...\n`));
|
|
44
|
+
const results = await checkoutBranchInAllRepos(clonedRepos, branchName);
|
|
45
|
+
for (const result of results) {
|
|
46
|
+
if (result.success) {
|
|
47
|
+
console.log(chalk.green(` ✓ ${result.repoName}`));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log(chalk.red(` ✗ ${result.repoName}: ${result.error}`));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const succeeded = results.filter((r) => r.success).length;
|
|
54
|
+
console.log('');
|
|
55
|
+
console.log(chalk.dim(`Switched ${succeeded}/${clonedRepos.length} repos to ${branchName}`));
|
|
56
|
+
// Run post-checkout hooks unless disabled
|
|
57
|
+
if (!options.noHooks) {
|
|
58
|
+
const postCheckoutHooks = manifest.workspace?.hooks?.['post-checkout'];
|
|
59
|
+
if (postCheckoutHooks && postCheckoutHooks.length > 0) {
|
|
60
|
+
console.log('');
|
|
61
|
+
console.log(chalk.blue('Running post-checkout hooks...\n'));
|
|
62
|
+
const hookResults = await runHooks(postCheckoutHooks, rootDir, manifest.workspace?.env);
|
|
63
|
+
for (const result of hookResults) {
|
|
64
|
+
if (result.success) {
|
|
65
|
+
console.log(chalk.green(` \u2713 ${result.command}`));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
console.log(chalk.red(` \u2717 ${result.command}`));
|
|
69
|
+
if (result.stderr) {
|
|
70
|
+
console.log(chalk.dim(` ${result.stderr.trim()}`));
|
|
71
|
+
}
|
|
72
|
+
if (result.error) {
|
|
73
|
+
console.log(chalk.dim(` Error: ${result.error}`));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const hooksFailed = hookResults.some((r) => !r.success);
|
|
78
|
+
if (hooksFailed) {
|
|
79
|
+
console.log('');
|
|
80
|
+
console.log(chalk.yellow('Some post-checkout hooks failed.'));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=checkout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAMA,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAkCD;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ElE"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { loadManifest, getAllRepoInfo, getManifestRepoInfo } from '../lib/manifest.js';
|
|
4
|
+
import { pathExists, getGitInstance, hasUncommittedChanges, isGitRepo } from '../lib/git.js';
|
|
5
|
+
/**
|
|
6
|
+
* Check if a repo has staged changes
|
|
7
|
+
*/
|
|
8
|
+
async function hasStagedChanges(repoPath) {
|
|
9
|
+
const git = getGitInstance(repoPath);
|
|
10
|
+
const status = await git.status();
|
|
11
|
+
return status.staged.length > 0;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Stage all changes in a repo
|
|
15
|
+
*/
|
|
16
|
+
async function stageAll(repoPath) {
|
|
17
|
+
const git = getGitInstance(repoPath);
|
|
18
|
+
await git.add('-A');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Commit staged changes in a repo
|
|
22
|
+
*/
|
|
23
|
+
async function commitChanges(repoPath, message) {
|
|
24
|
+
const git = getGitInstance(repoPath);
|
|
25
|
+
await git.commit(message);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Commit staged changes across all repositories
|
|
29
|
+
*/
|
|
30
|
+
export async function commit(options) {
|
|
31
|
+
const { message, all = false } = options;
|
|
32
|
+
if (!message) {
|
|
33
|
+
console.error(chalk.red('Commit message is required. Use -m "message"'));
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
const { manifest, rootDir } = await loadManifest();
|
|
37
|
+
let repos = getAllRepoInfo(manifest, rootDir);
|
|
38
|
+
// Include manifest repo if it exists
|
|
39
|
+
const manifestInfo = getManifestRepoInfo(manifest, rootDir);
|
|
40
|
+
if (manifestInfo && await isGitRepo(manifestInfo.absolutePath)) {
|
|
41
|
+
repos = [...repos, manifestInfo];
|
|
42
|
+
}
|
|
43
|
+
const results = [];
|
|
44
|
+
let hasChanges = false;
|
|
45
|
+
console.log(chalk.blue('Checking repositories for changes...\n'));
|
|
46
|
+
for (const repo of repos) {
|
|
47
|
+
const exists = await pathExists(repo.absolutePath);
|
|
48
|
+
if (!exists) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// If --all flag, stage all changes first
|
|
52
|
+
if (all) {
|
|
53
|
+
const hasChangesToStage = await hasUncommittedChanges(repo.absolutePath);
|
|
54
|
+
if (hasChangesToStage) {
|
|
55
|
+
await stageAll(repo.absolutePath);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Check if there are staged changes
|
|
59
|
+
const hasStaged = await hasStagedChanges(repo.absolutePath);
|
|
60
|
+
if (!hasStaged) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
hasChanges = true;
|
|
64
|
+
const spinner = ora(`Committing ${repo.name}...`).start();
|
|
65
|
+
try {
|
|
66
|
+
await commitChanges(repo.absolutePath, message);
|
|
67
|
+
spinner.succeed(`${repo.name}: committed`);
|
|
68
|
+
results.push({ repo, success: true, committed: true });
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
72
|
+
spinner.fail(`${repo.name}: ${errorMsg}`);
|
|
73
|
+
results.push({ repo, success: false, committed: false, error: errorMsg });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (!hasChanges) {
|
|
77
|
+
console.log(chalk.yellow('No staged changes to commit in any repository.'));
|
|
78
|
+
if (!all) {
|
|
79
|
+
console.log(chalk.dim('Use --all to stage and commit all changes, or stage changes with git add first.'));
|
|
80
|
+
}
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Summary
|
|
84
|
+
console.log('');
|
|
85
|
+
const committed = results.filter((r) => r.committed).length;
|
|
86
|
+
const failed = results.filter((r) => !r.success).length;
|
|
87
|
+
if (failed === 0) {
|
|
88
|
+
console.log(chalk.green(`Committed in ${committed} repository(s).`));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.log(chalk.yellow(`Committed in ${committed} repository(s). ${failed} failed.`));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAuCD;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EnE"}
|