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,201 @@
1
+ import chalk from 'chalk';
2
+ import { loadManifest, getAllRepoInfo, getManifestsDir, getManifestRepoInfo } from '../lib/manifest.js';
3
+ import { getAllRepoStatus, getRepoStatus, isGitRepo } from '../lib/git.js';
4
+ import { getAllLinkStatus } from '../lib/files.js';
5
+ import { getTimingContext } from '../lib/timing.js';
6
+ /**
7
+ * Format a single repo status line
8
+ */
9
+ function formatRepoStatus(status) {
10
+ if (!status.exists) {
11
+ return `${chalk.yellow(status.name)}: ${chalk.dim('not cloned')}`;
12
+ }
13
+ const parts = [];
14
+ // Branch name
15
+ parts.push(chalk.cyan(status.branch));
16
+ // Clean/dirty indicator
17
+ if (status.clean) {
18
+ parts.push(chalk.green('clean'));
19
+ }
20
+ else {
21
+ const changes = [];
22
+ if (status.staged > 0) {
23
+ changes.push(chalk.green(`+${status.staged} staged`));
24
+ }
25
+ if (status.modified > 0) {
26
+ changes.push(chalk.yellow(`~${status.modified} modified`));
27
+ }
28
+ if (status.untracked > 0) {
29
+ changes.push(chalk.dim(`?${status.untracked} untracked`));
30
+ }
31
+ parts.push(changes.join(', '));
32
+ }
33
+ // Ahead/behind
34
+ if (status.ahead > 0 || status.behind > 0) {
35
+ const sync = [];
36
+ if (status.ahead > 0) {
37
+ sync.push(chalk.green(`↑${status.ahead}`));
38
+ }
39
+ if (status.behind > 0) {
40
+ sync.push(chalk.red(`↓${status.behind}`));
41
+ }
42
+ parts.push(sync.join(' '));
43
+ }
44
+ return `${chalk.bold(status.name)}: ${parts.join(' | ')}`;
45
+ }
46
+ /**
47
+ * Show status of all repositories
48
+ */
49
+ export async function status(options = {}) {
50
+ const timing = getTimingContext();
51
+ timing?.startPhase('load manifest');
52
+ const { manifest, rootDir } = await loadManifest();
53
+ const repos = getAllRepoInfo(manifest, rootDir);
54
+ timing?.endPhase('load manifest');
55
+ timing?.startPhase('get repo status');
56
+ const statuses = await getAllRepoStatus(repos);
57
+ timing?.endPhase('get repo status');
58
+ // Get manifest status
59
+ timing?.startPhase('get manifest status');
60
+ const manifestInfo = getManifestRepoInfo(manifest, rootDir);
61
+ let manifestStatus = null;
62
+ if (manifestInfo) {
63
+ const isRepo = await isGitRepo(manifestInfo.absolutePath);
64
+ if (isRepo) {
65
+ manifestStatus = await getRepoStatus(manifestInfo);
66
+ }
67
+ }
68
+ timing?.endPhase('get manifest status');
69
+ if (options.json) {
70
+ const output = {
71
+ repos: statuses,
72
+ manifest: manifestStatus,
73
+ };
74
+ console.log(JSON.stringify(output, null, 2));
75
+ return;
76
+ }
77
+ console.log(chalk.blue('Repository Status\n'));
78
+ // Find longest repo name for alignment
79
+ const maxNameLength = Math.max(...statuses.map((s) => s.name.length));
80
+ for (const status of statuses) {
81
+ const paddedName = status.name.padEnd(maxNameLength);
82
+ if (!status.exists) {
83
+ console.log(` ${chalk.yellow(paddedName)} ${chalk.dim('not cloned')}`);
84
+ continue;
85
+ }
86
+ const parts = [];
87
+ // Branch with fixed width
88
+ const branchDisplay = status.branch.length > 20
89
+ ? status.branch.slice(0, 17) + '...'
90
+ : status.branch.padEnd(20);
91
+ parts.push(chalk.cyan(branchDisplay));
92
+ // Status indicators
93
+ if (status.clean) {
94
+ parts.push(chalk.green('✓'));
95
+ }
96
+ else {
97
+ const indicators = [];
98
+ if (status.staged > 0)
99
+ indicators.push(chalk.green(`+${status.staged}`));
100
+ if (status.modified > 0)
101
+ indicators.push(chalk.yellow(`~${status.modified}`));
102
+ if (status.untracked > 0)
103
+ indicators.push(chalk.dim(`?${status.untracked}`));
104
+ parts.push(indicators.join(' '));
105
+ }
106
+ // Ahead/behind
107
+ if (status.ahead > 0 || status.behind > 0) {
108
+ const sync = [];
109
+ if (status.ahead > 0)
110
+ sync.push(chalk.green(`↑${status.ahead}`));
111
+ if (status.behind > 0)
112
+ sync.push(chalk.red(`↓${status.behind}`));
113
+ parts.push(sync.join(' '));
114
+ }
115
+ console.log(` ${chalk.bold(paddedName)} ${parts.join(' ')}`);
116
+ }
117
+ // Summary
118
+ console.log('');
119
+ const cloned = statuses.filter((s) => s.exists).length;
120
+ const dirty = statuses.filter((s) => s.exists && !s.clean).length;
121
+ const notCloned = statuses.filter((s) => !s.exists).length;
122
+ const summaryParts = [];
123
+ summaryParts.push(`${cloned}/${repos.length} cloned`);
124
+ if (dirty > 0) {
125
+ summaryParts.push(chalk.yellow(`${dirty} with changes`));
126
+ }
127
+ if (notCloned > 0) {
128
+ summaryParts.push(chalk.dim(`${notCloned} not cloned`));
129
+ }
130
+ console.log(chalk.dim(` ${summaryParts.join(' | ')}`));
131
+ // Check if all on same branch
132
+ const branches = new Set(statuses.filter((s) => s.exists).map((s) => s.branch));
133
+ if (branches.size > 1) {
134
+ console.log('');
135
+ console.log(chalk.yellow(' \u26a0 Repositories are on different branches'));
136
+ }
137
+ // Show manifest status (already fetched above)
138
+ if (manifestStatus) {
139
+ console.log('');
140
+ console.log(chalk.blue('Manifest'));
141
+ const parts = [];
142
+ // Branch
143
+ const branchDisplay = manifestStatus.branch.length > 20
144
+ ? manifestStatus.branch.slice(0, 17) + '...'
145
+ : manifestStatus.branch;
146
+ parts.push(`branch: ${chalk.cyan(branchDisplay)}`);
147
+ // Status indicators
148
+ if (manifestStatus.clean) {
149
+ parts.push(chalk.green('✓'));
150
+ }
151
+ else {
152
+ const indicators = [];
153
+ if (manifestStatus.staged > 0)
154
+ indicators.push(chalk.green(`+${manifestStatus.staged}`));
155
+ if (manifestStatus.modified > 0)
156
+ indicators.push(chalk.yellow(`~${manifestStatus.modified}`));
157
+ if (manifestStatus.untracked > 0)
158
+ indicators.push(chalk.dim(`?${manifestStatus.untracked}`));
159
+ parts.push(indicators.join(' '));
160
+ }
161
+ // Ahead/behind
162
+ if (manifestStatus.ahead > 0 || manifestStatus.behind > 0) {
163
+ const sync = [];
164
+ if (manifestStatus.ahead > 0)
165
+ sync.push(chalk.green(`↑${manifestStatus.ahead}`));
166
+ if (manifestStatus.behind > 0)
167
+ sync.push(chalk.red(`↓${manifestStatus.behind}`));
168
+ parts.push(sync.join(' '));
169
+ }
170
+ console.log(chalk.dim(` ${parts.join(' ')}`));
171
+ }
172
+ // Show link status summary
173
+ timing?.startPhase('get link status');
174
+ const manifestsDir = getManifestsDir(rootDir);
175
+ const linkStatuses = await getAllLinkStatus(manifest, rootDir, manifestsDir);
176
+ timing?.endPhase('get link status');
177
+ if (linkStatuses.length > 0) {
178
+ const validLinks = linkStatuses.filter((l) => l.status === 'valid').length;
179
+ const brokenLinks = linkStatuses.filter((l) => l.status === 'broken').length;
180
+ const missingLinks = linkStatuses.filter((l) => l.status === 'missing').length;
181
+ const conflictLinks = linkStatuses.filter((l) => l.status === 'conflict').length;
182
+ console.log('');
183
+ console.log(chalk.blue('Links'));
184
+ const linkParts = [];
185
+ linkParts.push(`${validLinks}/${linkStatuses.length} valid`);
186
+ if (brokenLinks > 0) {
187
+ linkParts.push(chalk.red(`${brokenLinks} broken`));
188
+ }
189
+ if (missingLinks > 0) {
190
+ linkParts.push(chalk.yellow(`${missingLinks} missing`));
191
+ }
192
+ if (conflictLinks > 0) {
193
+ linkParts.push(chalk.red(`${conflictLinks} conflicts`));
194
+ }
195
+ console.log(chalk.dim(` ${linkParts.join(' | ')}`));
196
+ if (brokenLinks + missingLinks + conflictLinks > 0) {
197
+ console.log(chalk.dim(` Run 'cr link --status' for details`));
198
+ }
199
+ }
200
+ }
201
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ interface SyncOptions {
2
+ fetch?: boolean;
3
+ all?: boolean;
4
+ noLink?: boolean;
5
+ noHooks?: boolean;
6
+ }
7
+ /**
8
+ * Sync (pull or fetch) all repositories
9
+ * First updates the manifest repository, then syncs each managed repo
10
+ */
11
+ export declare function sync(options?: SyncOptions): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +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,CAgMnE"}
@@ -0,0 +1,183 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { loadManifest, getAllRepoInfo, getManifestsDir } from '../lib/manifest.js';
4
+ import { pullLatest, fetchRemote, pathExists, getCurrentBranch, getRemoteUrl, setRemoteUrl, setUpstreamBranch, safePullLatest } from '../lib/git.js';
5
+ import { processAllLinks } from '../lib/files.js';
6
+ import { runHooks } from '../lib/hooks.js';
7
+ import { getTimingContext } from '../lib/timing.js';
8
+ /**
9
+ * Sync (pull or fetch) all repositories
10
+ * First updates the manifest repository, then syncs each managed repo
11
+ */
12
+ export async function sync(options = {}) {
13
+ const timing = getTimingContext();
14
+ // Load manifest to get rootDir
15
+ timing?.startPhase('load manifest');
16
+ const { manifest, rootDir } = await loadManifest();
17
+ const manifestsDir = getManifestsDir(rootDir);
18
+ timing?.endPhase('load manifest');
19
+ // 1. Update manifest repository first
20
+ timing?.startPhase('update manifest');
21
+ const manifestSpinner = ora('Updating manifests...').start();
22
+ try {
23
+ // Check if manifest has a URL configured and ensure remote is set
24
+ if (manifest.manifest?.url) {
25
+ const existingRemote = await getRemoteUrl(manifestsDir);
26
+ if (!existingRemote) {
27
+ await setRemoteUrl(manifestsDir, manifest.manifest.url);
28
+ await setUpstreamBranch(manifestsDir);
29
+ manifestSpinner.text = 'Configured manifest remote, updating...';
30
+ }
31
+ }
32
+ const hasRemote = await getRemoteUrl(manifestsDir);
33
+ if (!hasRemote) {
34
+ manifestSpinner.warn('Manifests has no remote configured (add manifest.url to manifest.yaml)');
35
+ }
36
+ else if (options.fetch) {
37
+ await fetchRemote(manifestsDir);
38
+ manifestSpinner.succeed('Fetched manifest updates');
39
+ }
40
+ else {
41
+ // Use safePullLatest to handle case where tracking branch was deleted (after PR merge)
42
+ const defaultBranch = manifest.manifest?.default_branch ?? 'main';
43
+ const result = await safePullLatest(manifestsDir, defaultBranch);
44
+ if (result.pulled) {
45
+ if (result.recovered) {
46
+ manifestSpinner.succeed(`Pulled latest manifest (${result.message})`);
47
+ }
48
+ else {
49
+ manifestSpinner.succeed('Pulled latest manifest');
50
+ }
51
+ }
52
+ else {
53
+ throw new Error(result.message ?? 'Unknown error');
54
+ }
55
+ }
56
+ }
57
+ catch (error) {
58
+ const errorMsg = error instanceof Error ? error.message : String(error);
59
+ if (errorMsg.includes('uncommitted changes')) {
60
+ manifestSpinner.warn('Manifests have uncommitted changes, skipping');
61
+ }
62
+ else {
63
+ manifestSpinner.fail(`Failed to update manifests: ${errorMsg}`);
64
+ }
65
+ }
66
+ timing?.endPhase('update manifest');
67
+ // 2. Reload manifest (may have changed after pull)
68
+ const { manifest: updatedManifest } = await loadManifest();
69
+ const repos = getAllRepoInfo(updatedManifest, rootDir);
70
+ console.log(chalk.blue(`\nSyncing ${repos.length} repositories...\n`));
71
+ timing?.startPhase('sync repos');
72
+ const results = [];
73
+ for (const repo of repos) {
74
+ const exists = await pathExists(repo.absolutePath);
75
+ if (!exists) {
76
+ console.log(chalk.yellow(` ${repo.name}: not cloned (run 'gitgrip init <url>')`));
77
+ results.push({ repo, success: false, error: 'not cloned' });
78
+ continue;
79
+ }
80
+ const spinner = ora(`${options.fetch ? 'Fetching' : 'Pulling'} ${repo.name}...`).start();
81
+ timing?.startPhase(repo.name);
82
+ try {
83
+ const branch = await getCurrentBranch(repo.absolutePath);
84
+ if (options.fetch) {
85
+ await fetchRemote(repo.absolutePath);
86
+ spinner.succeed(`${repo.name} (${chalk.cyan(branch)}): fetched`);
87
+ }
88
+ else {
89
+ await pullLatest(repo.absolutePath);
90
+ spinner.succeed(`${repo.name} (${chalk.cyan(branch)}): pulled`);
91
+ }
92
+ results.push({ repo, success: true, branch });
93
+ timing?.endPhase(repo.name);
94
+ }
95
+ catch (error) {
96
+ const errorMsg = error instanceof Error ? error.message : String(error);
97
+ // Check for common errors
98
+ if (errorMsg.includes('uncommitted changes')) {
99
+ spinner.warn(`${repo.name}: has uncommitted changes, skipping`);
100
+ results.push({ repo, success: false, error: 'uncommitted changes' });
101
+ }
102
+ else if (errorMsg.includes('diverged')) {
103
+ spinner.warn(`${repo.name}: branch has diverged from remote`);
104
+ results.push({ repo, success: false, error: 'diverged' });
105
+ }
106
+ else {
107
+ spinner.fail(`${repo.name}: ${errorMsg}`);
108
+ results.push({ repo, success: false, error: errorMsg });
109
+ }
110
+ timing?.endPhase(repo.name);
111
+ }
112
+ }
113
+ timing?.endPhase('sync repos');
114
+ // Summary
115
+ console.log('');
116
+ const succeeded = results.filter((r) => r.success).length;
117
+ const failed = results.filter((r) => !r.success).length;
118
+ if (failed === 0) {
119
+ console.log(chalk.green(`All ${succeeded} repositories synced successfully.`));
120
+ }
121
+ else {
122
+ console.log(chalk.yellow(`Synced ${succeeded}/${repos.length} repositories. ${failed} had issues.`));
123
+ }
124
+ // Process links unless disabled
125
+ if (!options.noLink) {
126
+ const hasRepoLinks = Object.values(updatedManifest.repos).some((repo) => (repo.copyfile && repo.copyfile.length > 0) || (repo.linkfile && repo.linkfile.length > 0));
127
+ const hasManifestLinks = updatedManifest.manifest && ((updatedManifest.manifest.copyfile && updatedManifest.manifest.copyfile.length > 0) ||
128
+ (updatedManifest.manifest.linkfile && updatedManifest.manifest.linkfile.length > 0));
129
+ if (hasRepoLinks || hasManifestLinks) {
130
+ console.log('');
131
+ timing?.startPhase('process links');
132
+ const linkSpinner = ora('Processing links...').start();
133
+ try {
134
+ const linkResults = await processAllLinks(updatedManifest, rootDir, { force: false }, manifestsDir);
135
+ const totalLinks = linkResults.reduce((sum, r) => sum + r.copyfiles.length + r.linkfiles.length, 0);
136
+ const successfulLinks = linkResults.reduce((sum, r) => sum +
137
+ r.copyfiles.filter((c) => c.success).length +
138
+ r.linkfiles.filter((l) => l.success).length, 0);
139
+ if (successfulLinks === totalLinks) {
140
+ linkSpinner.succeed(`Processed ${totalLinks} link(s)`);
141
+ }
142
+ else {
143
+ linkSpinner.warn(`Processed ${successfulLinks}/${totalLinks} link(s), some failed`);
144
+ }
145
+ }
146
+ catch (error) {
147
+ linkSpinner.fail(`Failed to process links: ${error instanceof Error ? error.message : String(error)}`);
148
+ }
149
+ timing?.endPhase('process links');
150
+ }
151
+ }
152
+ // Run post-sync hooks unless disabled
153
+ if (!options.noHooks) {
154
+ const postSyncHooks = updatedManifest.workspace?.hooks?.['post-sync'];
155
+ if (postSyncHooks && postSyncHooks.length > 0) {
156
+ console.log('');
157
+ console.log(chalk.blue('Running post-sync hooks...\n'));
158
+ timing?.startPhase('run hooks');
159
+ const hookResults = await runHooks(postSyncHooks, rootDir, updatedManifest.workspace?.env);
160
+ for (const result of hookResults) {
161
+ if (result.success) {
162
+ console.log(chalk.green(` \u2713 ${result.command}`));
163
+ }
164
+ else {
165
+ console.log(chalk.red(` \u2717 ${result.command}`));
166
+ if (result.stderr) {
167
+ console.log(chalk.dim(` ${result.stderr.trim()}`));
168
+ }
169
+ if (result.error) {
170
+ console.log(chalk.dim(` Error: ${result.error}`));
171
+ }
172
+ }
173
+ }
174
+ const hooksFailed = hookResults.some((r) => !r.success);
175
+ if (hooksFailed) {
176
+ console.log('');
177
+ console.log(chalk.yellow('Some post-sync hooks failed.'));
178
+ }
179
+ timing?.endPhase('run hooks');
180
+ }
181
+ }
182
+ }
183
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}