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.
Files changed (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +211 -0
  3. package/actions/cross-repo-sync/action.yml +55 -0
  4. package/assets/banner.svg +73 -0
  5. package/assets/icon.svg +30 -0
  6. package/assets/logo-dark.svg +36 -0
  7. package/assets/logo.svg +36 -0
  8. package/dist/commands/add.d.ts +9 -0
  9. package/dist/commands/add.d.ts.map +1 -0
  10. package/dist/commands/add.js +80 -0
  11. package/dist/commands/add.js.map +1 -0
  12. package/dist/commands/bench.d.ts +12 -0
  13. package/dist/commands/bench.d.ts.map +1 -0
  14. package/dist/commands/bench.js +136 -0
  15. package/dist/commands/bench.js.map +1 -0
  16. package/dist/commands/branch.d.ts +15 -0
  17. package/dist/commands/branch.d.ts.map +1 -0
  18. package/dist/commands/branch.js +159 -0
  19. package/dist/commands/branch.js.map +1 -0
  20. package/dist/commands/checkout.d.ts +10 -0
  21. package/dist/commands/checkout.d.ts.map +1 -0
  22. package/dist/commands/checkout.js +85 -0
  23. package/dist/commands/checkout.js.map +1 -0
  24. package/dist/commands/commit.d.ts +10 -0
  25. package/dist/commands/commit.d.ts.map +1 -0
  26. package/dist/commands/commit.js +94 -0
  27. package/dist/commands/commit.js.map +1 -0
  28. package/dist/commands/diff.d.ts +11 -0
  29. package/dist/commands/diff.d.ts.map +1 -0
  30. package/dist/commands/diff.js +105 -0
  31. package/dist/commands/diff.js.map +1 -0
  32. package/dist/commands/env.d.ts +8 -0
  33. package/dist/commands/env.d.ts.map +1 -0
  34. package/dist/commands/env.js +35 -0
  35. package/dist/commands/env.js.map +1 -0
  36. package/dist/commands/forall.d.ts +13 -0
  37. package/dist/commands/forall.d.ts.map +1 -0
  38. package/dist/commands/forall.js +116 -0
  39. package/dist/commands/forall.js.map +1 -0
  40. package/dist/commands/init.d.ts +15 -0
  41. package/dist/commands/init.d.ts.map +1 -0
  42. package/dist/commands/init.js +106 -0
  43. package/dist/commands/init.js.map +1 -0
  44. package/dist/commands/link.d.ts +11 -0
  45. package/dist/commands/link.d.ts.map +1 -0
  46. package/dist/commands/link.js +205 -0
  47. package/dist/commands/link.js.map +1 -0
  48. package/dist/commands/migrate.d.ts +17 -0
  49. package/dist/commands/migrate.d.ts.map +1 -0
  50. package/dist/commands/migrate.js +180 -0
  51. package/dist/commands/migrate.js.map +1 -0
  52. package/dist/commands/pr/create.d.ts +13 -0
  53. package/dist/commands/pr/create.d.ts.map +1 -0
  54. package/dist/commands/pr/create.js +202 -0
  55. package/dist/commands/pr/create.js.map +1 -0
  56. package/dist/commands/pr/index.d.ts +4 -0
  57. package/dist/commands/pr/index.d.ts.map +1 -0
  58. package/dist/commands/pr/index.js +4 -0
  59. package/dist/commands/pr/index.js.map +1 -0
  60. package/dist/commands/pr/merge.d.ts +11 -0
  61. package/dist/commands/pr/merge.d.ts.map +1 -0
  62. package/dist/commands/pr/merge.js +168 -0
  63. package/dist/commands/pr/merge.js.map +1 -0
  64. package/dist/commands/pr/status.d.ts +9 -0
  65. package/dist/commands/pr/status.d.ts.map +1 -0
  66. package/dist/commands/pr/status.js +139 -0
  67. package/dist/commands/pr/status.js.map +1 -0
  68. package/dist/commands/push.d.ts +10 -0
  69. package/dist/commands/push.d.ts.map +1 -0
  70. package/dist/commands/push.js +101 -0
  71. package/dist/commands/push.js.map +1 -0
  72. package/dist/commands/run.d.ts +8 -0
  73. package/dist/commands/run.d.ts.map +1 -0
  74. package/dist/commands/run.js +75 -0
  75. package/dist/commands/run.js.map +1 -0
  76. package/dist/commands/status.d.ts +9 -0
  77. package/dist/commands/status.d.ts.map +1 -0
  78. package/dist/commands/status.js +201 -0
  79. package/dist/commands/status.js.map +1 -0
  80. package/dist/commands/sync.d.ts +13 -0
  81. package/dist/commands/sync.d.ts.map +1 -0
  82. package/dist/commands/sync.js +183 -0
  83. package/dist/commands/sync.js.map +1 -0
  84. package/dist/index.d.ts +3 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +352 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/lib/__bench__/files.bench.d.ts +2 -0
  89. package/dist/lib/__bench__/files.bench.d.ts.map +1 -0
  90. package/dist/lib/__bench__/files.bench.js +52 -0
  91. package/dist/lib/__bench__/files.bench.js.map +1 -0
  92. package/dist/lib/__bench__/manifest.bench.d.ts +2 -0
  93. package/dist/lib/__bench__/manifest.bench.d.ts.map +1 -0
  94. package/dist/lib/__bench__/manifest.bench.js +74 -0
  95. package/dist/lib/__bench__/manifest.bench.js.map +1 -0
  96. package/dist/lib/files.d.ts +84 -0
  97. package/dist/lib/files.d.ts.map +1 -0
  98. package/dist/lib/files.js +492 -0
  99. package/dist/lib/files.js.map +1 -0
  100. package/dist/lib/git.d.ts +125 -0
  101. package/dist/lib/git.d.ts.map +1 -0
  102. package/dist/lib/git.js +370 -0
  103. package/dist/lib/git.js.map +1 -0
  104. package/dist/lib/github.d.ts +92 -0
  105. package/dist/lib/github.d.ts.map +1 -0
  106. package/dist/lib/github.js +284 -0
  107. package/dist/lib/github.js.map +1 -0
  108. package/dist/lib/hooks.d.ts +19 -0
  109. package/dist/lib/hooks.d.ts.map +1 -0
  110. package/dist/lib/hooks.js +63 -0
  111. package/dist/lib/hooks.js.map +1 -0
  112. package/dist/lib/linker.d.ts +56 -0
  113. package/dist/lib/linker.d.ts.map +1 -0
  114. package/dist/lib/linker.js +185 -0
  115. package/dist/lib/linker.js.map +1 -0
  116. package/dist/lib/manifest.d.ts +73 -0
  117. package/dist/lib/manifest.d.ts.map +1 -0
  118. package/dist/lib/manifest.js +400 -0
  119. package/dist/lib/manifest.js.map +1 -0
  120. package/dist/lib/scripts.d.ts +26 -0
  121. package/dist/lib/scripts.d.ts.map +1 -0
  122. package/dist/lib/scripts.js +123 -0
  123. package/dist/lib/scripts.js.map +1 -0
  124. package/dist/lib/timing.d.ts +100 -0
  125. package/dist/lib/timing.d.ts.map +1 -0
  126. package/dist/lib/timing.js +293 -0
  127. package/dist/lib/timing.js.map +1 -0
  128. package/dist/types.d.ts +312 -0
  129. package/dist/types.d.ts.map +1 -0
  130. package/dist/types.js +2 -0
  131. package/dist/types.js.map +1 -0
  132. 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":"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"}
@@ -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,10 @@
1
+ interface CommitOptions {
2
+ message: string;
3
+ all?: boolean;
4
+ }
5
+ /**
6
+ * Commit staged changes across all repositories
7
+ */
8
+ export declare function commit(options: CommitOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=commit.d.ts.map
@@ -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,11 @@
1
+ interface DiffOptions {
2
+ staged?: boolean;
3
+ stat?: boolean;
4
+ nameOnly?: boolean;
5
+ }
6
+ /**
7
+ * Show diff across all repositories
8
+ */
9
+ export declare function diff(options?: DiffOptions): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=diff.d.ts.map
@@ -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"}