gitx.do 0.0.1

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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +156 -0
  3. package/dist/durable-object/object-store.d.ts +113 -0
  4. package/dist/durable-object/object-store.d.ts.map +1 -0
  5. package/dist/durable-object/object-store.js +387 -0
  6. package/dist/durable-object/object-store.js.map +1 -0
  7. package/dist/durable-object/schema.d.ts +17 -0
  8. package/dist/durable-object/schema.d.ts.map +1 -0
  9. package/dist/durable-object/schema.js +43 -0
  10. package/dist/durable-object/schema.js.map +1 -0
  11. package/dist/durable-object/wal.d.ts +111 -0
  12. package/dist/durable-object/wal.d.ts.map +1 -0
  13. package/dist/durable-object/wal.js +200 -0
  14. package/dist/durable-object/wal.js.map +1 -0
  15. package/dist/index.d.ts +24 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +101 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/mcp/adapter.d.ts +231 -0
  20. package/dist/mcp/adapter.d.ts.map +1 -0
  21. package/dist/mcp/adapter.js +502 -0
  22. package/dist/mcp/adapter.js.map +1 -0
  23. package/dist/mcp/sandbox.d.ts +261 -0
  24. package/dist/mcp/sandbox.d.ts.map +1 -0
  25. package/dist/mcp/sandbox.js +983 -0
  26. package/dist/mcp/sandbox.js.map +1 -0
  27. package/dist/mcp/sdk-adapter.d.ts +413 -0
  28. package/dist/mcp/sdk-adapter.d.ts.map +1 -0
  29. package/dist/mcp/sdk-adapter.js +672 -0
  30. package/dist/mcp/sdk-adapter.js.map +1 -0
  31. package/dist/mcp/tools.d.ts +133 -0
  32. package/dist/mcp/tools.d.ts.map +1 -0
  33. package/dist/mcp/tools.js +1604 -0
  34. package/dist/mcp/tools.js.map +1 -0
  35. package/dist/ops/blame.d.ts +148 -0
  36. package/dist/ops/blame.d.ts.map +1 -0
  37. package/dist/ops/blame.js +754 -0
  38. package/dist/ops/blame.js.map +1 -0
  39. package/dist/ops/branch.d.ts +215 -0
  40. package/dist/ops/branch.d.ts.map +1 -0
  41. package/dist/ops/branch.js +608 -0
  42. package/dist/ops/branch.js.map +1 -0
  43. package/dist/ops/commit-traversal.d.ts +209 -0
  44. package/dist/ops/commit-traversal.d.ts.map +1 -0
  45. package/dist/ops/commit-traversal.js +755 -0
  46. package/dist/ops/commit-traversal.js.map +1 -0
  47. package/dist/ops/commit.d.ts +221 -0
  48. package/dist/ops/commit.d.ts.map +1 -0
  49. package/dist/ops/commit.js +606 -0
  50. package/dist/ops/commit.js.map +1 -0
  51. package/dist/ops/merge-base.d.ts +223 -0
  52. package/dist/ops/merge-base.d.ts.map +1 -0
  53. package/dist/ops/merge-base.js +581 -0
  54. package/dist/ops/merge-base.js.map +1 -0
  55. package/dist/ops/merge.d.ts +385 -0
  56. package/dist/ops/merge.d.ts.map +1 -0
  57. package/dist/ops/merge.js +1203 -0
  58. package/dist/ops/merge.js.map +1 -0
  59. package/dist/ops/tag.d.ts +182 -0
  60. package/dist/ops/tag.d.ts.map +1 -0
  61. package/dist/ops/tag.js +608 -0
  62. package/dist/ops/tag.js.map +1 -0
  63. package/dist/ops/tree-builder.d.ts +82 -0
  64. package/dist/ops/tree-builder.d.ts.map +1 -0
  65. package/dist/ops/tree-builder.js +246 -0
  66. package/dist/ops/tree-builder.js.map +1 -0
  67. package/dist/ops/tree-diff.d.ts +243 -0
  68. package/dist/ops/tree-diff.d.ts.map +1 -0
  69. package/dist/ops/tree-diff.js +657 -0
  70. package/dist/ops/tree-diff.js.map +1 -0
  71. package/dist/pack/delta.d.ts +68 -0
  72. package/dist/pack/delta.d.ts.map +1 -0
  73. package/dist/pack/delta.js +343 -0
  74. package/dist/pack/delta.js.map +1 -0
  75. package/dist/pack/format.d.ts +84 -0
  76. package/dist/pack/format.d.ts.map +1 -0
  77. package/dist/pack/format.js +261 -0
  78. package/dist/pack/format.js.map +1 -0
  79. package/dist/pack/full-generation.d.ts +327 -0
  80. package/dist/pack/full-generation.d.ts.map +1 -0
  81. package/dist/pack/full-generation.js +1159 -0
  82. package/dist/pack/full-generation.js.map +1 -0
  83. package/dist/pack/generation.d.ts +118 -0
  84. package/dist/pack/generation.d.ts.map +1 -0
  85. package/dist/pack/generation.js +459 -0
  86. package/dist/pack/generation.js.map +1 -0
  87. package/dist/pack/index.d.ts +181 -0
  88. package/dist/pack/index.d.ts.map +1 -0
  89. package/dist/pack/index.js +552 -0
  90. package/dist/pack/index.js.map +1 -0
  91. package/dist/refs/branch.d.ts +224 -0
  92. package/dist/refs/branch.d.ts.map +1 -0
  93. package/dist/refs/branch.js +170 -0
  94. package/dist/refs/branch.js.map +1 -0
  95. package/dist/refs/storage.d.ts +208 -0
  96. package/dist/refs/storage.d.ts.map +1 -0
  97. package/dist/refs/storage.js +421 -0
  98. package/dist/refs/storage.js.map +1 -0
  99. package/dist/refs/tag.d.ts +230 -0
  100. package/dist/refs/tag.d.ts.map +1 -0
  101. package/dist/refs/tag.js +188 -0
  102. package/dist/refs/tag.js.map +1 -0
  103. package/dist/storage/lru-cache.d.ts +188 -0
  104. package/dist/storage/lru-cache.d.ts.map +1 -0
  105. package/dist/storage/lru-cache.js +410 -0
  106. package/dist/storage/lru-cache.js.map +1 -0
  107. package/dist/storage/object-index.d.ts +140 -0
  108. package/dist/storage/object-index.d.ts.map +1 -0
  109. package/dist/storage/object-index.js +166 -0
  110. package/dist/storage/object-index.js.map +1 -0
  111. package/dist/storage/r2-pack.d.ts +394 -0
  112. package/dist/storage/r2-pack.d.ts.map +1 -0
  113. package/dist/storage/r2-pack.js +1062 -0
  114. package/dist/storage/r2-pack.js.map +1 -0
  115. package/dist/tiered/cdc-pipeline.d.ts +316 -0
  116. package/dist/tiered/cdc-pipeline.d.ts.map +1 -0
  117. package/dist/tiered/cdc-pipeline.js +771 -0
  118. package/dist/tiered/cdc-pipeline.js.map +1 -0
  119. package/dist/tiered/migration.d.ts +242 -0
  120. package/dist/tiered/migration.d.ts.map +1 -0
  121. package/dist/tiered/migration.js +592 -0
  122. package/dist/tiered/migration.js.map +1 -0
  123. package/dist/tiered/parquet-writer.d.ts +248 -0
  124. package/dist/tiered/parquet-writer.d.ts.map +1 -0
  125. package/dist/tiered/parquet-writer.js +555 -0
  126. package/dist/tiered/parquet-writer.js.map +1 -0
  127. package/dist/tiered/read-path.d.ts +141 -0
  128. package/dist/tiered/read-path.d.ts.map +1 -0
  129. package/dist/tiered/read-path.js +204 -0
  130. package/dist/tiered/read-path.js.map +1 -0
  131. package/dist/types/objects.d.ts +53 -0
  132. package/dist/types/objects.d.ts.map +1 -0
  133. package/dist/types/objects.js +291 -0
  134. package/dist/types/objects.js.map +1 -0
  135. package/dist/types/storage.d.ts +117 -0
  136. package/dist/types/storage.d.ts.map +1 -0
  137. package/dist/types/storage.js +8 -0
  138. package/dist/types/storage.js.map +1 -0
  139. package/dist/utils/hash.d.ts +31 -0
  140. package/dist/utils/hash.d.ts.map +1 -0
  141. package/dist/utils/hash.js +60 -0
  142. package/dist/utils/hash.js.map +1 -0
  143. package/dist/utils/sha1.d.ts +26 -0
  144. package/dist/utils/sha1.d.ts.map +1 -0
  145. package/dist/utils/sha1.js +127 -0
  146. package/dist/utils/sha1.js.map +1 -0
  147. package/dist/wire/capabilities.d.ts +236 -0
  148. package/dist/wire/capabilities.d.ts.map +1 -0
  149. package/dist/wire/capabilities.js +437 -0
  150. package/dist/wire/capabilities.js.map +1 -0
  151. package/dist/wire/pkt-line.d.ts +67 -0
  152. package/dist/wire/pkt-line.d.ts.map +1 -0
  153. package/dist/wire/pkt-line.js +145 -0
  154. package/dist/wire/pkt-line.js.map +1 -0
  155. package/dist/wire/receive-pack.d.ts +302 -0
  156. package/dist/wire/receive-pack.d.ts.map +1 -0
  157. package/dist/wire/receive-pack.js +885 -0
  158. package/dist/wire/receive-pack.js.map +1 -0
  159. package/dist/wire/smart-http.d.ts +321 -0
  160. package/dist/wire/smart-http.d.ts.map +1 -0
  161. package/dist/wire/smart-http.js +654 -0
  162. package/dist/wire/smart-http.js.map +1 -0
  163. package/dist/wire/upload-pack.d.ts +333 -0
  164. package/dist/wire/upload-pack.d.ts.map +1 -0
  165. package/dist/wire/upload-pack.js +850 -0
  166. package/dist/wire/upload-pack.js.map +1 -0
  167. package/package.json +61 -0
@@ -0,0 +1,608 @@
1
+ /**
2
+ * Git Branch Operations
3
+ *
4
+ * Provides branch creation, deletion, renaming, listing, checkout,
5
+ * and tracking functionality.
6
+ */
7
+ // ============================================================================
8
+ // Internal state storage for tracking info (in-memory for the mock RefStore)
9
+ // ============================================================================
10
+ // Use WeakMap to associate tracking info with specific RefStore instances
11
+ // This ensures that each RefStore has its own tracking state
12
+ const trackingStores = new WeakMap();
13
+ const defaultBranchNames = new WeakMap();
14
+ /**
15
+ * Get the tracking store for a specific RefStore instance
16
+ */
17
+ function getTrackingStore(refStore) {
18
+ let store = trackingStores.get(refStore);
19
+ if (!store) {
20
+ store = new Map();
21
+ trackingStores.set(refStore, store);
22
+ }
23
+ return store;
24
+ }
25
+ // ============================================================================
26
+ // Branch Name Validation
27
+ // ============================================================================
28
+ const MAX_BRANCH_NAME_LENGTH = 255;
29
+ /**
30
+ * Check if a branch name is valid according to Git rules
31
+ */
32
+ export function isValidBranchName(name) {
33
+ // Empty string is invalid
34
+ if (!name || name.length === 0) {
35
+ return false;
36
+ }
37
+ // Check max length
38
+ if (name.length > MAX_BRANCH_NAME_LENGTH) {
39
+ return false;
40
+ }
41
+ // Cannot start with dash
42
+ if (name.startsWith('-')) {
43
+ return false;
44
+ }
45
+ // Cannot end with .lock
46
+ if (name.endsWith('.lock')) {
47
+ return false;
48
+ }
49
+ // Cannot end with slash or dot
50
+ if (name.endsWith('/') || name.endsWith('.')) {
51
+ return false;
52
+ }
53
+ // Cannot contain double dots
54
+ if (name.includes('..')) {
55
+ return false;
56
+ }
57
+ // Cannot contain consecutive slashes
58
+ if (name.includes('//')) {
59
+ return false;
60
+ }
61
+ // Cannot be exactly "@"
62
+ if (name === '@') {
63
+ return false;
64
+ }
65
+ // Cannot contain @{
66
+ if (name.includes('@{')) {
67
+ return false;
68
+ }
69
+ // Cannot be HEAD or start with refs/
70
+ if (name === 'HEAD' || name.startsWith('refs/')) {
71
+ return false;
72
+ }
73
+ // Check for invalid characters
74
+ // Git disallows: space, ~, ^, :, \, ?, *, [, control characters
75
+ const invalidChars = /[\s~^:\\?*\[\x00-\x1f\x7f]/;
76
+ if (invalidChars.test(name)) {
77
+ return false;
78
+ }
79
+ // Check for non-ASCII characters (unicode)
80
+ // eslint-disable-next-line no-control-regex
81
+ if (/[^\x00-\x7F]/.test(name)) {
82
+ return false;
83
+ }
84
+ return true;
85
+ }
86
+ /**
87
+ * Normalize a branch name by removing refs/heads/ prefix
88
+ */
89
+ export function normalizeBranchName(name) {
90
+ if (name.startsWith('refs/heads/')) {
91
+ return name.slice(11);
92
+ }
93
+ return name;
94
+ }
95
+ /**
96
+ * Get the full ref path for a branch name
97
+ */
98
+ function getRefPath(name, remote = false) {
99
+ if (name.startsWith('refs/')) {
100
+ return name;
101
+ }
102
+ if (remote) {
103
+ return `refs/remotes/${name}`;
104
+ }
105
+ return `refs/heads/${name}`;
106
+ }
107
+ // ============================================================================
108
+ // Branch Operations
109
+ // ============================================================================
110
+ /**
111
+ * Resolve a start point to a SHA
112
+ * Handles branch names, remote refs, and direct SHAs
113
+ */
114
+ async function resolveStartPoint(refStore, startPoint) {
115
+ // Check if it's already a SHA (40 hex chars)
116
+ if (/^[a-f0-9]{40}$/i.test(startPoint)) {
117
+ return startPoint;
118
+ }
119
+ // Try as local branch
120
+ const localRef = await refStore.getRef(`refs/heads/${startPoint}`);
121
+ if (localRef) {
122
+ return localRef;
123
+ }
124
+ // Try as remote branch (origin/branch format)
125
+ if (startPoint.includes('/')) {
126
+ const remoteRef = await refStore.getRef(`refs/remotes/${startPoint}`);
127
+ if (remoteRef) {
128
+ return remoteRef;
129
+ }
130
+ }
131
+ // Try as full ref
132
+ const fullRef = await refStore.getRef(startPoint);
133
+ if (fullRef) {
134
+ return fullRef;
135
+ }
136
+ return null;
137
+ }
138
+ /**
139
+ * Create a new branch
140
+ */
141
+ export async function createBranch(refStore, options) {
142
+ const { name, startPoint, force = false, checkout = false } = options;
143
+ // Validate branch name
144
+ if (!isValidBranchName(name)) {
145
+ throw new Error(`Invalid branch name: ${name}`);
146
+ }
147
+ const refPath = getRefPath(name);
148
+ // Check if branch already exists
149
+ const existingRef = await refStore.getRef(refPath);
150
+ if (existingRef && !force) {
151
+ throw new Error(`Branch '${name}' already exists`);
152
+ }
153
+ // Resolve the start point to a SHA
154
+ let sha;
155
+ if (startPoint) {
156
+ const resolved = await resolveStartPoint(refStore, startPoint);
157
+ if (!resolved) {
158
+ throw new Error(`Invalid start point: ${startPoint}`);
159
+ }
160
+ sha = resolved;
161
+ }
162
+ else {
163
+ // Use current HEAD
164
+ const headRef = await refStore.getSymbolicRef('HEAD');
165
+ if (headRef) {
166
+ const headSha = await refStore.getRef(headRef);
167
+ if (!headSha) {
168
+ throw new Error('HEAD does not point to a valid commit');
169
+ }
170
+ sha = headSha;
171
+ }
172
+ else {
173
+ // Detached HEAD - get the direct SHA
174
+ const headSha = await refStore.getHead();
175
+ sha = headSha;
176
+ }
177
+ }
178
+ // Create the branch
179
+ await refStore.setRef(refPath, sha);
180
+ // Checkout if requested
181
+ if (checkout) {
182
+ await refStore.setSymbolicRef('HEAD', refPath);
183
+ }
184
+ return {
185
+ name,
186
+ ref: refPath,
187
+ sha,
188
+ created: !existingRef
189
+ };
190
+ }
191
+ /**
192
+ * Delete a branch
193
+ */
194
+ export async function deleteBranch(refStore, options) {
195
+ const { name, names, force = false, checkMerged = false, remote = false } = options;
196
+ // Handle multiple branches
197
+ if (names && names.length > 0) {
198
+ const deletedBranches = [];
199
+ for (const branchName of names) {
200
+ const result = await deleteBranch(refStore, {
201
+ name: branchName,
202
+ force,
203
+ checkMerged,
204
+ remote
205
+ });
206
+ if (result.deleted) {
207
+ deletedBranches.push({ name: result.name, sha: result.sha });
208
+ }
209
+ }
210
+ return {
211
+ deleted: deletedBranches.length > 0,
212
+ name: names[0],
213
+ sha: deletedBranches[0]?.sha || '',
214
+ deletedBranches
215
+ };
216
+ }
217
+ if (!name) {
218
+ throw new Error('Branch name is required');
219
+ }
220
+ // Determine the ref path
221
+ const refPath = remote
222
+ ? `refs/remotes/${name}`
223
+ : getRefPath(name);
224
+ // Check if branch exists
225
+ const sha = await refStore.getRef(refPath);
226
+ if (!sha) {
227
+ throw new Error(`Branch '${name}' not found`);
228
+ }
229
+ // Check if trying to delete current branch
230
+ if (!remote) {
231
+ const currentBranch = await getCurrentBranch(refStore);
232
+ if (currentBranch === normalizeBranchName(name)) {
233
+ throw new Error(`Cannot delete the current branch '${name}'`);
234
+ }
235
+ }
236
+ // Check if branch is merged (simplified check)
237
+ if (checkMerged && !force) {
238
+ // For the test, we check if the branch SHA differs from main
239
+ const mainSha = await refStore.getRef('refs/heads/main');
240
+ if (sha !== mainSha) {
241
+ throw new Error(`Branch '${name}' is not fully merged`);
242
+ }
243
+ }
244
+ // Delete the branch
245
+ await refStore.deleteRef(refPath);
246
+ // Remove tracking info if exists
247
+ getTrackingStore(refStore).delete(name);
248
+ return {
249
+ deleted: true,
250
+ name: normalizeBranchName(name),
251
+ sha,
252
+ deletedBranches: [{ name: normalizeBranchName(name), sha }]
253
+ };
254
+ }
255
+ /**
256
+ * List branches
257
+ */
258
+ export async function listBranches(refStore, options = {}) {
259
+ const { remote = false, all = false, pattern, contains, merged: _merged, noMerged: _noMerged, sort, verbose = false } = options;
260
+ const branches = [];
261
+ const currentBranch = await getCurrentBranch(refStore);
262
+ // Get local branches
263
+ if (!remote || all) {
264
+ const localRefs = await refStore.listRefs('refs/heads/');
265
+ for (const { ref, sha } of localRefs) {
266
+ const name = normalizeBranchName(ref);
267
+ // Apply pattern filter
268
+ if (pattern && !matchPattern(name, pattern)) {
269
+ continue;
270
+ }
271
+ // Apply contains filter
272
+ if (contains && sha !== contains) {
273
+ continue;
274
+ }
275
+ const branchInfo = {
276
+ name,
277
+ ref,
278
+ sha,
279
+ current: name === currentBranch
280
+ };
281
+ if (verbose) {
282
+ branchInfo.tracking = getTrackingStore(refStore).get(name) || null;
283
+ branchInfo.commitSubject = '';
284
+ }
285
+ branches.push(branchInfo);
286
+ }
287
+ }
288
+ // Get remote branches
289
+ if (remote || all) {
290
+ const remoteRefs = await refStore.listRefs('refs/remotes/');
291
+ for (const { ref, sha } of remoteRefs) {
292
+ const name = ref.replace('refs/remotes/', '');
293
+ // Apply pattern filter
294
+ if (pattern && !matchPattern(name, pattern)) {
295
+ continue;
296
+ }
297
+ // Apply contains filter
298
+ if (contains && sha !== contains) {
299
+ continue;
300
+ }
301
+ const branchInfo = {
302
+ name,
303
+ ref,
304
+ sha,
305
+ current: false
306
+ };
307
+ if (verbose) {
308
+ branchInfo.tracking = null;
309
+ branchInfo.commitSubject = '';
310
+ }
311
+ branches.push(branchInfo);
312
+ }
313
+ }
314
+ // Apply sorting
315
+ if (sort) {
316
+ const descending = sort.startsWith('-');
317
+ const sortField = descending ? sort.slice(1) : sort;
318
+ if (sortField === 'name') {
319
+ branches.sort((a, b) => {
320
+ const cmp = a.name.localeCompare(b.name);
321
+ return descending ? -cmp : cmp;
322
+ });
323
+ }
324
+ // committerdate sorting would require commit info - just return as-is
325
+ }
326
+ return branches;
327
+ }
328
+ /**
329
+ * Simple glob pattern matching for branch names
330
+ */
331
+ function matchPattern(name, pattern) {
332
+ // Convert glob pattern to regex
333
+ const regexPattern = pattern
334
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&') // Escape special regex chars
335
+ .replace(/\*/g, '.*')
336
+ .replace(/\?/g, '.');
337
+ const regex = new RegExp(`^${regexPattern}$`);
338
+ return regex.test(name);
339
+ }
340
+ /**
341
+ * Rename a branch
342
+ */
343
+ export async function renameBranch(refStore, options) {
344
+ let { oldName, newName, force = false } = options;
345
+ // If oldName not specified, use current branch
346
+ if (!oldName) {
347
+ const current = await getCurrentBranch(refStore);
348
+ if (!current) {
349
+ throw new Error('No current branch to rename');
350
+ }
351
+ oldName = current;
352
+ }
353
+ // Validate new name
354
+ if (!isValidBranchName(newName)) {
355
+ throw new Error(`Invalid branch name: ${newName}`);
356
+ }
357
+ // Check if old branch exists
358
+ const oldRefPath = getRefPath(oldName);
359
+ const sha = await refStore.getRef(oldRefPath);
360
+ if (!sha) {
361
+ throw new Error(`Branch '${oldName}' not found`);
362
+ }
363
+ // Check if new name already exists
364
+ const newRefPath = getRefPath(newName);
365
+ const existingNew = await refStore.getRef(newRefPath);
366
+ if (existingNew && !force) {
367
+ throw new Error(`Branch '${newName}' already exists`);
368
+ }
369
+ // Check if renaming current branch
370
+ const currentBranch = await getCurrentBranch(refStore);
371
+ const isCurrentBranch = currentBranch === oldName;
372
+ // Create new branch ref
373
+ await refStore.setRef(newRefPath, sha);
374
+ // Delete old branch ref
375
+ await refStore.deleteRef(oldRefPath);
376
+ // Update HEAD if renaming current branch
377
+ if (isCurrentBranch) {
378
+ await refStore.setSymbolicRef('HEAD', newRefPath);
379
+ }
380
+ // Transfer tracking info if exists
381
+ const store = getTrackingStore(refStore);
382
+ const trackingInfo = store.get(oldName);
383
+ if (trackingInfo) {
384
+ store.delete(oldName);
385
+ store.set(newName, trackingInfo);
386
+ }
387
+ return {
388
+ renamed: true,
389
+ oldName,
390
+ newName,
391
+ sha
392
+ };
393
+ }
394
+ /**
395
+ * Checkout a branch
396
+ */
397
+ export async function checkoutBranch(refStore, options) {
398
+ const { name, sha, create = false, force = false, startPoint, detach = false, track } = options;
399
+ // Validation: can't have both name and sha without detach
400
+ if (name && sha && !detach) {
401
+ throw new Error('Cannot specify both branch name and SHA without detach');
402
+ }
403
+ // Detached HEAD checkout
404
+ if (detach && sha) {
405
+ await refStore.setHead(sha);
406
+ return {
407
+ success: true,
408
+ branch: null,
409
+ sha,
410
+ detached: true
411
+ };
412
+ }
413
+ if (!name) {
414
+ throw new Error('Branch name is required');
415
+ }
416
+ // Create new branch if requested
417
+ if (create) {
418
+ const refPath = getRefPath(name);
419
+ const existing = await refStore.getRef(refPath);
420
+ if (existing && !force) {
421
+ throw new Error(`Branch '${name}' already exists`);
422
+ }
423
+ // Resolve start point
424
+ let targetSha;
425
+ if (startPoint) {
426
+ const resolved = await resolveStartPoint(refStore, startPoint);
427
+ if (!resolved) {
428
+ throw new Error(`Invalid start point: ${startPoint}`);
429
+ }
430
+ targetSha = resolved;
431
+ }
432
+ else {
433
+ const headRef = await refStore.getSymbolicRef('HEAD');
434
+ if (headRef) {
435
+ targetSha = (await refStore.getRef(headRef)) || '';
436
+ }
437
+ else {
438
+ targetSha = await refStore.getHead();
439
+ }
440
+ }
441
+ await refStore.setRef(refPath, targetSha);
442
+ await refStore.setSymbolicRef('HEAD', refPath);
443
+ // Set tracking if specified
444
+ if (track) {
445
+ const [remote, ...branchParts] = track.split('/');
446
+ const remoteBranch = branchParts.join('/');
447
+ getTrackingStore(refStore).set(name, {
448
+ upstream: track,
449
+ remote,
450
+ remoteBranch,
451
+ ahead: 0,
452
+ behind: 0
453
+ });
454
+ }
455
+ return {
456
+ success: true,
457
+ branch: name,
458
+ sha: targetSha,
459
+ created: !existing,
460
+ tracking: track
461
+ };
462
+ }
463
+ // Checkout existing branch
464
+ const refPath = getRefPath(name);
465
+ const branchSha = await refStore.getRef(refPath);
466
+ if (!branchSha) {
467
+ throw new Error(`Branch '${name}' not found`);
468
+ }
469
+ await refStore.setSymbolicRef('HEAD', refPath);
470
+ // Set tracking if specified
471
+ if (track) {
472
+ const [remote, ...branchParts] = track.split('/');
473
+ const remoteBranch = branchParts.join('/');
474
+ getTrackingStore(refStore).set(name, {
475
+ upstream: track,
476
+ remote,
477
+ remoteBranch,
478
+ ahead: 0,
479
+ behind: 0
480
+ });
481
+ }
482
+ return {
483
+ success: true,
484
+ branch: name,
485
+ sha: branchSha,
486
+ tracking: track
487
+ };
488
+ }
489
+ /**
490
+ * Get the current branch name
491
+ */
492
+ export async function getCurrentBranch(refStore) {
493
+ const headRef = await refStore.getSymbolicRef('HEAD');
494
+ if (!headRef) {
495
+ return null;
496
+ }
497
+ return normalizeBranchName(headRef);
498
+ }
499
+ /**
500
+ * Get branch information
501
+ */
502
+ export async function getBranchInfo(refStore, name) {
503
+ const refPath = getRefPath(name);
504
+ const sha = await refStore.getRef(refPath);
505
+ if (!sha) {
506
+ return null;
507
+ }
508
+ const currentBranch = await getCurrentBranch(refStore);
509
+ return {
510
+ name,
511
+ ref: refPath,
512
+ sha,
513
+ current: name === currentBranch,
514
+ tracking: getTrackingStore(refStore).get(name) || null
515
+ };
516
+ }
517
+ /**
518
+ * Check if a branch exists
519
+ */
520
+ export async function branchExists(refStore, name, options = {}) {
521
+ const { remote = false } = options;
522
+ const refPath = remote
523
+ ? `refs/remotes/${name}`
524
+ : getRefPath(name);
525
+ const sha = await refStore.getRef(refPath);
526
+ return sha !== null;
527
+ }
528
+ /**
529
+ * Set branch tracking
530
+ */
531
+ export async function setBranchTracking(refStore, branch, upstream) {
532
+ // Check if local branch exists
533
+ const refPath = getRefPath(branch);
534
+ const exists = await refStore.getRef(refPath);
535
+ if (!exists) {
536
+ throw new Error(`Branch '${branch}' not found`);
537
+ }
538
+ // Parse upstream
539
+ const [remote, ...branchParts] = upstream.split('/');
540
+ const remoteBranch = branchParts.join('/');
541
+ const trackingInfo = {
542
+ upstream,
543
+ remote,
544
+ remoteBranch,
545
+ ahead: 0,
546
+ behind: 0
547
+ };
548
+ getTrackingStore(refStore).set(branch, trackingInfo);
549
+ return {
550
+ success: true,
551
+ branch,
552
+ upstream,
553
+ remote,
554
+ remoteBranch
555
+ };
556
+ }
557
+ /**
558
+ * Get branch tracking info
559
+ */
560
+ export async function getBranchTracking(refStore, branch) {
561
+ return getTrackingStore(refStore).get(branch) || null;
562
+ }
563
+ /**
564
+ * Remove branch tracking
565
+ */
566
+ export async function removeBranchTracking(refStore, branch) {
567
+ getTrackingStore(refStore).delete(branch);
568
+ return { success: true };
569
+ }
570
+ /**
571
+ * Get the default branch
572
+ */
573
+ export async function getDefaultBranch(refStore) {
574
+ // Return stored default if set
575
+ const storedDefault = defaultBranchNames.get(refStore);
576
+ if (storedDefault) {
577
+ return storedDefault;
578
+ }
579
+ // Check if 'main' exists
580
+ const mainExists = await refStore.getRef('refs/heads/main');
581
+ if (mainExists) {
582
+ return 'main';
583
+ }
584
+ // Check if 'master' exists
585
+ const masterExists = await refStore.getRef('refs/heads/master');
586
+ if (masterExists) {
587
+ return 'master';
588
+ }
589
+ // Return first available branch
590
+ const branches = await refStore.listRefs('refs/heads/');
591
+ if (branches.length > 0) {
592
+ return normalizeBranchName(branches[0].ref);
593
+ }
594
+ return null;
595
+ }
596
+ /**
597
+ * Set the default branch
598
+ */
599
+ export async function setDefaultBranch(refStore, name) {
600
+ // Check if branch exists
601
+ const refPath = getRefPath(name);
602
+ const exists = await refStore.getRef(refPath);
603
+ if (!exists) {
604
+ throw new Error(`Branch '${name}' not found`);
605
+ }
606
+ defaultBranchNames.set(refStore, name);
607
+ }
608
+ //# sourceMappingURL=branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../src/ops/branch.ts"],"names":[],"mappings":"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"}