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,492 @@
1
+ import { copyFile as fsCopyFile, symlink, readlink, unlink, mkdir, access } from 'fs/promises';
2
+ import { resolve, dirname, relative, join, normalize } from 'path';
3
+ /**
4
+ * Check if a path exists
5
+ */
6
+ async function pathExists(path) {
7
+ try {
8
+ await access(path);
9
+ return true;
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ }
15
+ /**
16
+ * Check if a path is a symlink
17
+ */
18
+ async function isSymlink(path) {
19
+ try {
20
+ // Use lstat to detect symlink (stat follows the link)
21
+ const { lstat } = await import('fs/promises');
22
+ const stats = await lstat(path);
23
+ return stats.isSymbolicLink();
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ /**
30
+ * Validate that a path does not escape its boundary
31
+ */
32
+ export function validatePath(basePath, targetPath) {
33
+ const normalizedBase = normalize(resolve(basePath));
34
+ const normalizedTarget = normalize(resolve(basePath, targetPath));
35
+ return normalizedTarget.startsWith(normalizedBase);
36
+ }
37
+ /**
38
+ * Ensure directory exists for a file path
39
+ */
40
+ async function ensureDir(filePath) {
41
+ const dir = dirname(filePath);
42
+ await mkdir(dir, { recursive: true });
43
+ }
44
+ /**
45
+ * Copy a file from source to destination
46
+ */
47
+ export async function copyFile(src, dest, options = {}) {
48
+ const { backup = false, force = false, dryRun = false } = options;
49
+ // Check source exists
50
+ if (!(await pathExists(src))) {
51
+ return { copied: false, message: `Source does not exist: ${src}` };
52
+ }
53
+ // Check if destination exists
54
+ const destExists = await pathExists(dest);
55
+ if (destExists && !force) {
56
+ return { copied: false, message: `Destination exists: ${dest} (use --force to overwrite)` };
57
+ }
58
+ if (dryRun) {
59
+ return { copied: true, message: `Would copy ${src} -> ${dest}` };
60
+ }
61
+ // Create backup if needed
62
+ let backupPath;
63
+ if (destExists && backup) {
64
+ backupPath = `${dest}.backup.${Date.now()}`;
65
+ await fsCopyFile(dest, backupPath);
66
+ }
67
+ // Ensure destination directory exists
68
+ await ensureDir(dest);
69
+ // Copy the file
70
+ await fsCopyFile(src, dest);
71
+ return { copied: true, backupPath };
72
+ }
73
+ /**
74
+ * Create a relative symlink from dest pointing to src
75
+ */
76
+ export async function createSymlink(src, dest, options = {}) {
77
+ const { force = false, dryRun = false } = options;
78
+ // Check source exists
79
+ if (!(await pathExists(src))) {
80
+ return { created: false, message: `Source does not exist: ${src}` };
81
+ }
82
+ // Check if destination exists
83
+ const destExists = await pathExists(dest);
84
+ const destIsLink = await isSymlink(dest);
85
+ if (destExists || destIsLink) {
86
+ if (!force) {
87
+ return { created: false, message: `Destination exists: ${dest} (use --force to overwrite)` };
88
+ }
89
+ if (!dryRun) {
90
+ await unlink(dest);
91
+ }
92
+ }
93
+ if (dryRun) {
94
+ return { created: true, message: `Would link ${dest} -> ${src}` };
95
+ }
96
+ // Ensure destination directory exists
97
+ await ensureDir(dest);
98
+ // Calculate relative path from dest to src
99
+ const destDir = dirname(dest);
100
+ const relativePath = relative(destDir, src);
101
+ // Create symlink
102
+ await symlink(relativePath, dest);
103
+ return { created: true };
104
+ }
105
+ /**
106
+ * Get the status of a single link
107
+ */
108
+ export async function getLinkStatus(type, repoName, src, dest) {
109
+ const srcExists = await pathExists(src);
110
+ const destExists = await pathExists(dest);
111
+ const destIsLink = await isSymlink(dest);
112
+ if (!srcExists) {
113
+ return {
114
+ type,
115
+ repoName,
116
+ src,
117
+ dest,
118
+ status: 'broken',
119
+ message: 'Source does not exist',
120
+ };
121
+ }
122
+ if (!destExists && !destIsLink) {
123
+ return {
124
+ type,
125
+ repoName,
126
+ src,
127
+ dest,
128
+ status: 'missing',
129
+ message: 'Destination not created',
130
+ };
131
+ }
132
+ if (type === 'linkfile') {
133
+ if (!destIsLink) {
134
+ return {
135
+ type,
136
+ repoName,
137
+ src,
138
+ dest,
139
+ status: 'conflict',
140
+ message: 'Destination exists but is not a symlink',
141
+ };
142
+ }
143
+ // Check if symlink points to correct location
144
+ try {
145
+ const linkTarget = await readlink(dest);
146
+ const destDir = dirname(dest);
147
+ const resolvedTarget = resolve(destDir, linkTarget);
148
+ const resolvedSrc = resolve(src);
149
+ if (resolvedTarget !== resolvedSrc) {
150
+ return {
151
+ type,
152
+ repoName,
153
+ src,
154
+ dest,
155
+ status: 'broken',
156
+ message: `Symlink points to wrong target: ${linkTarget}`,
157
+ };
158
+ }
159
+ }
160
+ catch {
161
+ return {
162
+ type,
163
+ repoName,
164
+ src,
165
+ dest,
166
+ status: 'broken',
167
+ message: 'Cannot read symlink target',
168
+ };
169
+ }
170
+ }
171
+ return {
172
+ type,
173
+ repoName,
174
+ src,
175
+ dest,
176
+ status: 'valid',
177
+ };
178
+ }
179
+ /**
180
+ * Process all copyfile and linkfile entries for a repository
181
+ */
182
+ export async function processRepoLinks(repoName, repoConfig, repoPath, rootDir, options = {}) {
183
+ const result = {
184
+ repoName,
185
+ copyfiles: [],
186
+ linkfiles: [],
187
+ };
188
+ // Process copyfiles
189
+ if (repoConfig.copyfile) {
190
+ for (const config of repoConfig.copyfile) {
191
+ const src = resolve(repoPath, config.src);
192
+ const dest = resolve(rootDir, config.dest);
193
+ // Validate paths
194
+ if (!validatePath(repoPath, config.src)) {
195
+ result.copyfiles.push({
196
+ src,
197
+ dest,
198
+ success: false,
199
+ message: 'Source path escapes repository boundary',
200
+ });
201
+ continue;
202
+ }
203
+ if (!validatePath(rootDir, config.dest)) {
204
+ result.copyfiles.push({
205
+ src,
206
+ dest,
207
+ success: false,
208
+ message: 'Destination path escapes workspace boundary',
209
+ });
210
+ continue;
211
+ }
212
+ const copyResult = await copyFile(src, dest, {
213
+ force: options.force,
214
+ dryRun: options.dryRun,
215
+ });
216
+ result.copyfiles.push({
217
+ src,
218
+ dest,
219
+ success: copyResult.copied,
220
+ message: copyResult.message,
221
+ });
222
+ }
223
+ }
224
+ // Process linkfiles
225
+ if (repoConfig.linkfile) {
226
+ for (const config of repoConfig.linkfile) {
227
+ const src = resolve(repoPath, config.src);
228
+ const dest = resolve(rootDir, config.dest);
229
+ // Validate paths
230
+ if (!validatePath(repoPath, config.src)) {
231
+ result.linkfiles.push({
232
+ src,
233
+ dest,
234
+ success: false,
235
+ message: 'Source path escapes repository boundary',
236
+ });
237
+ continue;
238
+ }
239
+ if (!validatePath(rootDir, config.dest)) {
240
+ result.linkfiles.push({
241
+ src,
242
+ dest,
243
+ success: false,
244
+ message: 'Destination path escapes workspace boundary',
245
+ });
246
+ continue;
247
+ }
248
+ const linkResult = await createSymlink(src, dest, {
249
+ force: options.force,
250
+ dryRun: options.dryRun,
251
+ });
252
+ result.linkfiles.push({
253
+ src,
254
+ dest,
255
+ success: linkResult.created,
256
+ message: linkResult.message,
257
+ });
258
+ }
259
+ }
260
+ return result;
261
+ }
262
+ /**
263
+ * Process links for manifest-level copyfile/linkfile entries
264
+ */
265
+ export async function processManifestLinks(manifest, manifestsDir, rootDir, options = {}) {
266
+ const result = {
267
+ repoName: 'manifest',
268
+ copyfiles: [],
269
+ linkfiles: [],
270
+ };
271
+ if (!manifest.manifest) {
272
+ return result;
273
+ }
274
+ // Process manifest copyfiles
275
+ if (manifest.manifest.copyfile) {
276
+ for (const config of manifest.manifest.copyfile) {
277
+ const src = resolve(manifestsDir, config.src);
278
+ const dest = resolve(rootDir, config.dest);
279
+ // Validate paths
280
+ if (!validatePath(manifestsDir, config.src)) {
281
+ result.copyfiles.push({
282
+ src,
283
+ dest,
284
+ success: false,
285
+ message: 'Source path escapes manifest boundary',
286
+ });
287
+ continue;
288
+ }
289
+ if (!validatePath(rootDir, config.dest)) {
290
+ result.copyfiles.push({
291
+ src,
292
+ dest,
293
+ success: false,
294
+ message: 'Destination path escapes workspace boundary',
295
+ });
296
+ continue;
297
+ }
298
+ const copyResult = await copyFile(src, dest, {
299
+ force: options.force,
300
+ dryRun: options.dryRun,
301
+ });
302
+ result.copyfiles.push({
303
+ src,
304
+ dest,
305
+ success: copyResult.copied,
306
+ message: copyResult.message,
307
+ });
308
+ }
309
+ }
310
+ // Process manifest linkfiles
311
+ if (manifest.manifest.linkfile) {
312
+ for (const config of manifest.manifest.linkfile) {
313
+ const src = resolve(manifestsDir, config.src);
314
+ const dest = resolve(rootDir, config.dest);
315
+ // Validate paths
316
+ if (!validatePath(manifestsDir, config.src)) {
317
+ result.linkfiles.push({
318
+ src,
319
+ dest,
320
+ success: false,
321
+ message: 'Source path escapes manifest boundary',
322
+ });
323
+ continue;
324
+ }
325
+ if (!validatePath(rootDir, config.dest)) {
326
+ result.linkfiles.push({
327
+ src,
328
+ dest,
329
+ success: false,
330
+ message: 'Destination path escapes workspace boundary',
331
+ });
332
+ continue;
333
+ }
334
+ const linkResult = await createSymlink(src, dest, {
335
+ force: options.force,
336
+ dryRun: options.dryRun,
337
+ });
338
+ result.linkfiles.push({
339
+ src,
340
+ dest,
341
+ success: linkResult.created,
342
+ message: linkResult.message,
343
+ });
344
+ }
345
+ }
346
+ return result;
347
+ }
348
+ /**
349
+ * Process all links for all repositories and manifest
350
+ */
351
+ export async function processAllLinks(manifest, rootDir, options = {}, manifestsDir) {
352
+ const results = [];
353
+ // Process manifest-level links first
354
+ if (manifestsDir) {
355
+ const manifestResult = await processManifestLinks(manifest, manifestsDir, rootDir, options);
356
+ if (manifestResult.copyfiles.length > 0 || manifestResult.linkfiles.length > 0) {
357
+ results.push(manifestResult);
358
+ }
359
+ }
360
+ // Process repo-level links
361
+ for (const [repoName, repoConfig] of Object.entries(manifest.repos)) {
362
+ const repoPath = resolve(rootDir, repoConfig.path);
363
+ const result = await processRepoLinks(repoName, repoConfig, repoPath, rootDir, options);
364
+ results.push(result);
365
+ }
366
+ return results;
367
+ }
368
+ /**
369
+ * Get status of all links (including manifest-level links)
370
+ */
371
+ export async function getAllLinkStatus(manifest, rootDir, manifestsDir) {
372
+ const statuses = [];
373
+ // Get manifest-level link statuses
374
+ if (manifestsDir && manifest.manifest) {
375
+ if (manifest.manifest.copyfile) {
376
+ for (const config of manifest.manifest.copyfile) {
377
+ const src = resolve(manifestsDir, config.src);
378
+ const dest = resolve(rootDir, config.dest);
379
+ const status = await getLinkStatus('copyfile', 'manifest', src, dest);
380
+ statuses.push(status);
381
+ }
382
+ }
383
+ if (manifest.manifest.linkfile) {
384
+ for (const config of manifest.manifest.linkfile) {
385
+ const src = resolve(manifestsDir, config.src);
386
+ const dest = resolve(rootDir, config.dest);
387
+ const status = await getLinkStatus('linkfile', 'manifest', src, dest);
388
+ statuses.push(status);
389
+ }
390
+ }
391
+ }
392
+ // Get repo-level link statuses
393
+ for (const [repoName, repoConfig] of Object.entries(manifest.repos)) {
394
+ const repoPath = resolve(rootDir, repoConfig.path);
395
+ if (repoConfig.copyfile) {
396
+ for (const config of repoConfig.copyfile) {
397
+ const src = resolve(repoPath, config.src);
398
+ const dest = resolve(rootDir, config.dest);
399
+ const status = await getLinkStatus('copyfile', repoName, src, dest);
400
+ statuses.push(status);
401
+ }
402
+ }
403
+ if (repoConfig.linkfile) {
404
+ for (const config of repoConfig.linkfile) {
405
+ const src = resolve(repoPath, config.src);
406
+ const dest = resolve(rootDir, config.dest);
407
+ const status = await getLinkStatus('linkfile', repoName, src, dest);
408
+ statuses.push(status);
409
+ }
410
+ }
411
+ }
412
+ return statuses;
413
+ }
414
+ /**
415
+ * Find and remove orphaned links (links that exist but are no longer in manifest)
416
+ */
417
+ export async function cleanOrphanedLinks(manifest, rootDir, options = {}) {
418
+ const results = [];
419
+ // Get all currently defined destinations
420
+ const definedDests = new Set();
421
+ // Add manifest-level destinations
422
+ if (manifest.manifest) {
423
+ if (manifest.manifest.copyfile) {
424
+ for (const config of manifest.manifest.copyfile) {
425
+ definedDests.add(resolve(rootDir, config.dest));
426
+ }
427
+ }
428
+ if (manifest.manifest.linkfile) {
429
+ for (const config of manifest.manifest.linkfile) {
430
+ definedDests.add(resolve(rootDir, config.dest));
431
+ }
432
+ }
433
+ }
434
+ // Add repo-level destinations
435
+ for (const repoConfig of Object.values(manifest.repos)) {
436
+ if (repoConfig.copyfile) {
437
+ for (const config of repoConfig.copyfile) {
438
+ definedDests.add(resolve(rootDir, config.dest));
439
+ }
440
+ }
441
+ if (repoConfig.linkfile) {
442
+ for (const config of repoConfig.linkfile) {
443
+ definedDests.add(resolve(rootDir, config.dest));
444
+ }
445
+ }
446
+ }
447
+ // Check common link locations for orphans
448
+ // This is a simplified implementation - in a full impl you'd track links in state
449
+ const linkDirs = [
450
+ join(rootDir, '.bin'),
451
+ ];
452
+ for (const linkDir of linkDirs) {
453
+ if (!(await pathExists(linkDir)))
454
+ continue;
455
+ const { readdir } = await import('fs/promises');
456
+ try {
457
+ const entries = await readdir(linkDir, { withFileTypes: true });
458
+ for (const entry of entries) {
459
+ const fullPath = join(linkDir, entry.name);
460
+ if (await isSymlink(fullPath)) {
461
+ if (!definedDests.has(fullPath)) {
462
+ if (options.dryRun) {
463
+ results.push({
464
+ path: fullPath,
465
+ removed: false,
466
+ message: `Would remove orphaned link: ${fullPath}`,
467
+ });
468
+ }
469
+ else {
470
+ try {
471
+ await unlink(fullPath);
472
+ results.push({ path: fullPath, removed: true });
473
+ }
474
+ catch (error) {
475
+ results.push({
476
+ path: fullPath,
477
+ removed: false,
478
+ message: `Failed to remove: ${error instanceof Error ? error.message : String(error)}`,
479
+ });
480
+ }
481
+ }
482
+ }
483
+ }
484
+ }
485
+ }
486
+ catch {
487
+ // Directory may not be readable
488
+ }
489
+ }
490
+ return results;
491
+ }
492
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/lib/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { SimpleGit } from 'simple-git';
2
+ import type { RepoInfo, RepoStatus, MultiRepoResult } from '../types.js';
3
+ /**
4
+ * Get a SimpleGit instance for a repository
5
+ */
6
+ export declare function getGitInstance(repoPath: string): SimpleGit;
7
+ /**
8
+ * Check if a directory is a git repository
9
+ */
10
+ export declare function isGitRepo(path: string): Promise<boolean>;
11
+ /**
12
+ * Check if a path exists
13
+ */
14
+ export declare function pathExists(path: string): Promise<boolean>;
15
+ /**
16
+ * Clone a repository
17
+ */
18
+ export declare function cloneRepo(url: string, path: string, branch?: string): Promise<void>;
19
+ /**
20
+ * Get the current branch name
21
+ */
22
+ export declare function getCurrentBranch(repoPath: string): Promise<string>;
23
+ /**
24
+ * Get repository status
25
+ */
26
+ export declare function getRepoStatus(repo: RepoInfo): Promise<RepoStatus>;
27
+ /**
28
+ * Get status for all repositories
29
+ */
30
+ export declare function getAllRepoStatus(repos: RepoInfo[]): Promise<RepoStatus[]>;
31
+ /**
32
+ * Create a branch in a repository
33
+ */
34
+ export declare function createBranch(repoPath: string, branchName: string): Promise<void>;
35
+ /**
36
+ * Checkout a branch in a repository
37
+ */
38
+ export declare function checkoutBranch(repoPath: string, branchName: string): Promise<void>;
39
+ /**
40
+ * Check if a branch exists locally
41
+ */
42
+ export declare function branchExists(repoPath: string, branchName: string): Promise<boolean>;
43
+ /**
44
+ * Check if a branch exists on remote
45
+ */
46
+ export declare function remoteBranchExists(repoPath: string, branchName: string, remote?: string): Promise<boolean>;
47
+ /**
48
+ * Pull latest changes from remote
49
+ */
50
+ export declare function pullLatest(repoPath: string, remote?: string): Promise<void>;
51
+ /**
52
+ * Fetch from remote
53
+ */
54
+ export declare function fetchRemote(repoPath: string, remote?: string): Promise<void>;
55
+ /**
56
+ * Push branch to remote
57
+ */
58
+ export declare function pushBranch(repoPath: string, branchName: string, remote?: string, setUpstream?: boolean): Promise<void>;
59
+ /**
60
+ * Get list of changed files (staged and unstaged)
61
+ */
62
+ export declare function getChangedFiles(repoPath: string): Promise<string[]>;
63
+ /**
64
+ * Check if there are uncommitted changes
65
+ */
66
+ export declare function hasUncommittedChanges(repoPath: string): Promise<boolean>;
67
+ /**
68
+ * Get commits between current branch and base branch
69
+ */
70
+ export declare function getCommitsBetween(repoPath: string, baseBranch: string, headBranch?: string): Promise<string[]>;
71
+ /**
72
+ * Check if branch has commits not in base
73
+ */
74
+ export declare function hasCommitsAhead(repoPath: string, baseBranch: string): Promise<boolean>;
75
+ /**
76
+ * Run an operation across multiple repos
77
+ */
78
+ export declare function runOnAllRepos<T>(repos: RepoInfo[], operation: (repo: RepoInfo) => Promise<T>): Promise<MultiRepoResult<T>[]>;
79
+ /**
80
+ * Create branch in all repos
81
+ */
82
+ export declare function createBranchInAllRepos(repos: RepoInfo[], branchName: string): Promise<MultiRepoResult<void>[]>;
83
+ /**
84
+ * Checkout branch in all repos
85
+ */
86
+ export declare function checkoutBranchInAllRepos(repos: RepoInfo[], branchName: string): Promise<MultiRepoResult<void>[]>;
87
+ /**
88
+ * Pull latest in all repos
89
+ */
90
+ export declare function pullAllRepos(repos: RepoInfo[]): Promise<MultiRepoResult<void>[]>;
91
+ /**
92
+ * Push branch in all repos that have it
93
+ */
94
+ export declare function pushAllRepos(repos: RepoInfo[], branchName: string, setUpstream?: boolean): Promise<MultiRepoResult<void>[]>;
95
+ /**
96
+ * Get the URL of a remote
97
+ */
98
+ export declare function getRemoteUrl(repoPath: string, remote?: string): Promise<string | null>;
99
+ /**
100
+ * Set the URL of a remote (creates it if it doesn't exist)
101
+ */
102
+ export declare function setRemoteUrl(repoPath: string, url: string, remote?: string): Promise<void>;
103
+ /**
104
+ * Set upstream tracking for the current branch
105
+ */
106
+ export declare function setUpstreamBranch(repoPath: string, remote?: string): Promise<void>;
107
+ /**
108
+ * Get the upstream tracking branch for a local branch
109
+ * Returns null if no upstream is configured
110
+ */
111
+ export declare function getUpstreamBranch(repoPath: string, branch?: string): Promise<string | null>;
112
+ /**
113
+ * Check if the upstream branch for current branch still exists on remote
114
+ */
115
+ export declare function upstreamBranchExists(repoPath: string, remote?: string): Promise<boolean>;
116
+ /**
117
+ * Safely pull latest, handling the case where upstream branch was deleted
118
+ * Returns true if pull succeeded, false if had to recover (checkout default branch)
119
+ */
120
+ export declare function safePullLatest(repoPath: string, defaultBranch?: string, remote?: string): Promise<{
121
+ pulled: boolean;
122
+ recovered: boolean;
123
+ message?: string;
124
+ }>;
125
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}