@ibgib/vcs-gib 0.0.30 → 0.0.33

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 (216) hide show
  1. package/dist/AUTO-GENERATED-version.d.mts +1 -1
  2. package/dist/AUTO-GENERATED-version.mjs +1 -1
  3. package/dist/bootstrap/node-bootstrap.d.mts.map +1 -1
  4. package/dist/bootstrap/node-bootstrap.mjs +7 -21
  5. package/dist/bootstrap/node-bootstrap.mjs.map +1 -1
  6. package/dist/cli/commands/{add-cmd.d.mts → cli-add-cmd.d.mts} +3 -4
  7. package/dist/cli/commands/cli-add-cmd.d.mts.map +1 -0
  8. package/dist/cli/commands/cli-add-cmd.mjs +45 -0
  9. package/dist/cli/commands/cli-add-cmd.mjs.map +1 -0
  10. package/dist/cli/commands/{branch-cmd.d.mts → cli-branch-cmd.d.mts} +9 -9
  11. package/dist/cli/commands/cli-branch-cmd.d.mts.map +1 -0
  12. package/dist/cli/commands/cli-branch-cmd.mjs +59 -0
  13. package/dist/cli/commands/cli-branch-cmd.mjs.map +1 -0
  14. package/dist/cli/commands/cli-checkout-cmd.d.mts +20 -0
  15. package/dist/cli/commands/cli-checkout-cmd.d.mts.map +1 -0
  16. package/dist/cli/commands/cli-checkout-cmd.mjs +50 -0
  17. package/dist/cli/commands/cli-checkout-cmd.mjs.map +1 -0
  18. package/dist/cli/commands/cli-commit-cmd.d.mts +23 -0
  19. package/dist/cli/commands/cli-commit-cmd.d.mts.map +1 -0
  20. package/dist/cli/commands/cli-commit-cmd.mjs +52 -0
  21. package/dist/cli/commands/cli-commit-cmd.mjs.map +1 -0
  22. package/dist/cli/commands/{generate-comment-cmd.d.mts → cli-generate-comment-cmd.d.mts} +1 -1
  23. package/dist/cli/commands/cli-generate-comment-cmd.d.mts.map +1 -0
  24. package/dist/cli/commands/{generate-comment-cmd.mjs → cli-generate-comment-cmd.mjs} +11 -6
  25. package/dist/cli/commands/cli-generate-comment-cmd.mjs.map +1 -0
  26. package/dist/cli/commands/{init-cmd.d.mts → cli-init-cmd.d.mts} +3 -3
  27. package/dist/cli/commands/cli-init-cmd.d.mts.map +1 -0
  28. package/dist/cli/commands/cli-init-cmd.mjs +47 -0
  29. package/dist/cli/commands/cli-init-cmd.mjs.map +1 -0
  30. package/dist/cli/commands/{log-cmd.d.mts → cli-log-cmd.d.mts} +3 -4
  31. package/dist/cli/commands/cli-log-cmd.d.mts.map +1 -0
  32. package/dist/cli/commands/cli-log-cmd.mjs +90 -0
  33. package/dist/cli/commands/cli-log-cmd.mjs.map +1 -0
  34. package/dist/cli/commands/cli-merge-cmd.d.mts +22 -0
  35. package/dist/cli/commands/cli-merge-cmd.d.mts.map +1 -0
  36. package/dist/cli/commands/cli-merge-cmd.mjs +66 -0
  37. package/dist/cli/commands/cli-merge-cmd.mjs.map +1 -0
  38. package/dist/cli/commands/{reset-cmd.d.mts → cli-reset-cmd.d.mts} +2 -2
  39. package/dist/cli/commands/cli-reset-cmd.d.mts.map +1 -0
  40. package/dist/cli/commands/cli-reset-cmd.mjs +63 -0
  41. package/dist/cli/commands/cli-reset-cmd.mjs.map +1 -0
  42. package/dist/cli/commands/cli-restore-cmd.d.mts +23 -0
  43. package/dist/cli/commands/cli-restore-cmd.d.mts.map +1 -0
  44. package/dist/cli/commands/cli-restore-cmd.mjs +55 -0
  45. package/dist/cli/commands/cli-restore-cmd.mjs.map +1 -0
  46. package/dist/cli/commands/{status-cmd.d.mts → cli-status-cmd.d.mts} +3 -3
  47. package/dist/cli/commands/cli-status-cmd.d.mts.map +1 -0
  48. package/dist/cli/commands/cli-status-cmd.mjs +96 -0
  49. package/dist/cli/commands/cli-status-cmd.mjs.map +1 -0
  50. package/dist/cli/vcs-cli-main.d.mts.map +1 -1
  51. package/dist/cli/vcs-cli-main.mjs +18 -15
  52. package/dist/cli/vcs-cli-main.mjs.map +1 -1
  53. package/dist/cli/vcs-projection-helper.d.mts +23 -0
  54. package/dist/cli/vcs-projection-helper.d.mts.map +1 -0
  55. package/dist/cli/vcs-projection-helper.mjs +91 -0
  56. package/dist/cli/vcs-projection-helper.mjs.map +1 -0
  57. package/dist/cli/vcs-repo-helper.d.mts +19 -0
  58. package/dist/cli/vcs-repo-helper.d.mts.map +1 -0
  59. package/dist/cli/vcs-repo-helper.mjs +74 -0
  60. package/dist/cli/vcs-repo-helper.mjs.map +1 -0
  61. package/dist/test/test-helpers.d.mts +11 -2
  62. package/dist/test/test-helpers.d.mts.map +1 -1
  63. package/dist/test/test-helpers.mjs +35 -0
  64. package/dist/test/test-helpers.mjs.map +1 -1
  65. package/package.json +6 -6
  66. package/src/AUTO-GENERATED-version.mts +1 -1
  67. package/src/bootstrap/node-bootstrap.mts +7 -21
  68. package/src/bootstrap/node-bootstrap.respec.mts +2 -2
  69. package/src/cli/cli-arg-parser.respec.mts +2 -2
  70. package/src/cli/cli-e2e.respec.mts +12 -12
  71. package/src/cli/commands/branch-checkout-cmd.respec.mts +426 -412
  72. package/src/cli/commands/cli-add-cmd.mts +65 -0
  73. package/src/cli/commands/cli-branch-cmd.mts +87 -0
  74. package/src/cli/commands/cli-checkout-cmd.mts +72 -0
  75. package/src/cli/commands/cli-commit-cmd.mts +77 -0
  76. package/src/cli/commands/{generate-comment-cmd.mts → cli-generate-comment-cmd.mts} +12 -6
  77. package/src/cli/commands/cli-init-cmd.mts +78 -0
  78. package/src/cli/commands/cli-log-cmd.mts +126 -0
  79. package/src/cli/commands/cli-merge-cmd.mts +99 -0
  80. package/src/cli/commands/cli-reset-cmd.mts +94 -0
  81. package/src/cli/commands/cli-restore-cmd.mts +87 -0
  82. package/src/cli/commands/cli-status-cmd.mts +131 -0
  83. package/src/cli/commands/commit-log-cmd.respec.mts +85 -28
  84. package/src/cli/commands/init-cmd.respec.mts +3 -3
  85. package/src/cli/commands/reset-restore-cmd.respec.mts +9 -9
  86. package/src/cli/commands/status-add-cmd.respec.mts +21 -17
  87. package/src/cli/vcs-cli-main.mts +18 -15
  88. package/src/cli/vcs-projection-helper.mts +112 -0
  89. package/src/cli/vcs-repo-helper.mts +99 -0
  90. package/src/engine/branch/branch-space.respec.mts +23 -21
  91. package/src/engine/merge/b2tfs-sync-comments.respec.mts +11 -11
  92. package/src/test/test-helpers.mts +50 -2
  93. package/src/vcs-gib.respec.mts +25 -16
  94. package/tsconfig.test.tsbuildinfo +1 -1
  95. package/tsconfig.tsbuildinfo +1 -1
  96. package/vcs-gib_test_output.md +58 -0
  97. package/dist/cli/commands/add-cmd.d.mts.map +0 -1
  98. package/dist/cli/commands/add-cmd.mjs +0 -346
  99. package/dist/cli/commands/add-cmd.mjs.map +0 -1
  100. package/dist/cli/commands/branch-cmd.d.mts.map +0 -1
  101. package/dist/cli/commands/branch-cmd.mjs +0 -238
  102. package/dist/cli/commands/branch-cmd.mjs.map +0 -1
  103. package/dist/cli/commands/checkout-cmd.d.mts +0 -21
  104. package/dist/cli/commands/checkout-cmd.d.mts.map +0 -1
  105. package/dist/cli/commands/checkout-cmd.mjs +0 -174
  106. package/dist/cli/commands/checkout-cmd.mjs.map +0 -1
  107. package/dist/cli/commands/commit-cmd.d.mts +0 -24
  108. package/dist/cli/commands/commit-cmd.d.mts.map +0 -1
  109. package/dist/cli/commands/commit-cmd.mjs +0 -449
  110. package/dist/cli/commands/commit-cmd.mjs.map +0 -1
  111. package/dist/cli/commands/generate-comment-cmd.d.mts.map +0 -1
  112. package/dist/cli/commands/generate-comment-cmd.mjs.map +0 -1
  113. package/dist/cli/commands/init-cmd.d.mts.map +0 -1
  114. package/dist/cli/commands/init-cmd.mjs +0 -119
  115. package/dist/cli/commands/init-cmd.mjs.map +0 -1
  116. package/dist/cli/commands/log-cmd.d.mts.map +0 -1
  117. package/dist/cli/commands/log-cmd.mjs +0 -349
  118. package/dist/cli/commands/log-cmd.mjs.map +0 -1
  119. package/dist/cli/commands/merge-cmd.d.mts +0 -36
  120. package/dist/cli/commands/merge-cmd.d.mts.map +0 -1
  121. package/dist/cli/commands/merge-cmd.mjs +0 -292
  122. package/dist/cli/commands/merge-cmd.mjs.map +0 -1
  123. package/dist/cli/commands/reset-cmd.d.mts.map +0 -1
  124. package/dist/cli/commands/reset-cmd.mjs +0 -93
  125. package/dist/cli/commands/reset-cmd.mjs.map +0 -1
  126. package/dist/cli/commands/restore-cmd.d.mts +0 -22
  127. package/dist/cli/commands/restore-cmd.d.mts.map +0 -1
  128. package/dist/cli/commands/restore-cmd.mjs +0 -115
  129. package/dist/cli/commands/restore-cmd.mjs.map +0 -1
  130. package/dist/cli/commands/status-cmd.d.mts.map +0 -1
  131. package/dist/cli/commands/status-cmd.mjs +0 -132
  132. package/dist/cli/commands/status-cmd.mjs.map +0 -1
  133. package/dist/engine/branch/branch-graph-helper.d.mts +0 -28
  134. package/dist/engine/branch/branch-graph-helper.d.mts.map +0 -1
  135. package/dist/engine/branch/branch-graph-helper.mjs +0 -81
  136. package/dist/engine/branch/branch-graph-helper.mjs.map +0 -1
  137. package/dist/engine/branch/branch-helper.d.mts +0 -40
  138. package/dist/engine/branch/branch-helper.d.mts.map +0 -1
  139. package/dist/engine/branch/branch-helper.mjs +0 -78
  140. package/dist/engine/branch/branch-helper.mjs.map +0 -1
  141. package/dist/engine/branch/branch-space-helper.d.mts +0 -23
  142. package/dist/engine/branch/branch-space-helper.d.mts.map +0 -1
  143. package/dist/engine/branch/branch-space-helper.mjs +0 -78
  144. package/dist/engine/branch/branch-space-helper.mjs.map +0 -1
  145. package/dist/engine/branch/branch-types.d.mts +0 -26
  146. package/dist/engine/branch/branch-types.d.mts.map +0 -1
  147. package/dist/engine/branch/branch-types.mjs +0 -7
  148. package/dist/engine/branch/branch-types.mjs.map +0 -1
  149. package/dist/engine/diff/line-diff-helper.d.mts +0 -76
  150. package/dist/engine/diff/line-diff-helper.d.mts.map +0 -1
  151. package/dist/engine/diff/line-diff-helper.mjs +0 -144
  152. package/dist/engine/diff/line-diff-helper.mjs.map +0 -1
  153. package/dist/engine/filter/glob-helper.d.mts +0 -51
  154. package/dist/engine/filter/glob-helper.d.mts.map +0 -1
  155. package/dist/engine/filter/glob-helper.mjs +0 -132
  156. package/dist/engine/filter/glob-helper.mjs.map +0 -1
  157. package/dist/engine/index/index-helper.d.mts +0 -113
  158. package/dist/engine/index/index-helper.d.mts.map +0 -1
  159. package/dist/engine/index/index-helper.mjs +0 -533
  160. package/dist/engine/index/index-helper.mjs.map +0 -1
  161. package/dist/engine/index/index-types.d.mts +0 -63
  162. package/dist/engine/index/index-types.d.mts.map +0 -1
  163. package/dist/engine/index/index-types.mjs +0 -7
  164. package/dist/engine/index/index-types.mjs.map +0 -1
  165. package/dist/engine/item/item-atom-helper.d.mts +0 -20
  166. package/dist/engine/item/item-atom-helper.d.mts.map +0 -1
  167. package/dist/engine/item/item-atom-helper.mjs +0 -30
  168. package/dist/engine/item/item-atom-helper.mjs.map +0 -1
  169. package/dist/engine/item/item-helper.d.mts +0 -94
  170. package/dist/engine/item/item-helper.d.mts.map +0 -1
  171. package/dist/engine/item/item-helper.mjs +0 -424
  172. package/dist/engine/item/item-helper.mjs.map +0 -1
  173. package/dist/engine/item/item-types.d.mts +0 -128
  174. package/dist/engine/item/item-types.d.mts.map +0 -1
  175. package/dist/engine/item/item-types.mjs +0 -16
  176. package/dist/engine/item/item-types.mjs.map +0 -1
  177. package/dist/engine/merge/b2tfs-3way-graft-strategy.d.mts +0 -74
  178. package/dist/engine/merge/b2tfs-3way-graft-strategy.d.mts.map +0 -1
  179. package/dist/engine/merge/b2tfs-3way-graft-strategy.mjs +0 -570
  180. package/dist/engine/merge/b2tfs-3way-graft-strategy.mjs.map +0 -1
  181. package/dist/engine/merge/b2tfs-3way-graft-types.d.mts +0 -34
  182. package/dist/engine/merge/b2tfs-3way-graft-types.d.mts.map +0 -1
  183. package/dist/engine/merge/b2tfs-3way-graft-types.mjs +0 -2
  184. package/dist/engine/merge/b2tfs-3way-graft-types.mjs.map +0 -1
  185. package/dist/engine/status/status-helper.d.mts +0 -90
  186. package/dist/engine/status/status-helper.d.mts.map +0 -1
  187. package/dist/engine/status/status-helper.mjs +0 -286
  188. package/dist/engine/status/status-helper.mjs.map +0 -1
  189. package/src/cli/commands/add-cmd.mts +0 -435
  190. package/src/cli/commands/branch-cmd.mts +0 -311
  191. package/src/cli/commands/checkout-cmd.mts +0 -227
  192. package/src/cli/commands/commit-cmd.mts +0 -557
  193. package/src/cli/commands/init-cmd.mts +0 -152
  194. package/src/cli/commands/log-cmd.mts +0 -449
  195. package/src/cli/commands/merge-cmd.mts +0 -363
  196. package/src/cli/commands/reset-cmd.mts +0 -128
  197. package/src/cli/commands/restore-cmd.mts +0 -155
  198. package/src/cli/commands/status-cmd.mts +0 -168
  199. package/src/engine/branch/branch-graph-helper.mts +0 -117
  200. package/src/engine/branch/branch-helper.mts +0 -112
  201. package/src/engine/branch/branch-space-helper.mts +0 -110
  202. package/src/engine/branch/branch-types.mts +0 -29
  203. package/src/engine/diff/line-diff-helper.mts +0 -210
  204. package/src/engine/diff/line-diff-helper.respec.mts +0 -84
  205. package/src/engine/filter/glob-helper.mts +0 -165
  206. package/src/engine/filter/glob-helper.respec.mts +0 -94
  207. package/src/engine/index/index-helper.mts +0 -705
  208. package/src/engine/index/index-types.mts +0 -66
  209. package/src/engine/item/item-atom-helper.mts +0 -30
  210. package/src/engine/item/item-helper.mts +0 -544
  211. package/src/engine/item/item-types.mts +0 -137
  212. package/src/engine/item/item.respec.mts +0 -92
  213. package/src/engine/merge/b2tfs-3way-graft-strategy.mts +0 -630
  214. package/src/engine/merge/b2tfs-3way-graft-strategy.respec.mts +0 -346
  215. package/src/engine/merge/b2tfs-3way-graft-types.mts +0 -34
  216. package/src/engine/status/status-helper.mts +0 -383
@@ -1,174 +0,0 @@
1
- /**
2
- * @module checkout-cmd
3
- *
4
- * Command handler for `vcs checkout <branchName>`.
5
- * Switches activeBranch in B2tFSIndexIbGib_V1 in localSpace and projects branch snapshot onto worktree path.
6
- */
7
- import path from 'node:path';
8
- import fs from 'node:fs/promises';
9
- import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
10
- import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
11
- import { putInSpace, getLatestAddrs } from '@ibgib/core-gib/dist/witness/space/space-helper.mjs';
12
- import { bootstrapVcsMetaspace } from '../../bootstrap/node-bootstrap.mjs';
13
- import { getB2tFSBranchSpaceName } from '../../engine/branch/branch-helper.mjs';
14
- import { getOrCreateBranchSpace } from '../../engine/branch/branch-space-helper.mjs';
15
- import { B2TFS_CHILD_ITEM_REL8N_NAME } from '../../engine/item/item-types.mjs';
16
- import { writeB2tFSItemToFS, getIbGibWithMetaspaceFallback } from '../../engine/item/item-helper.mjs';
17
- import { getB2tFSIndexIbGib, updateB2tFSIndexIbGib } from '../../engine/index/index-helper.mjs';
18
- import { GLOBAL_LOG_A_LOT } from '../../vcs-gib-constants.mjs';
19
- const lcFile = `[checkout-cmd]`;
20
- const logalot = GLOBAL_LOG_A_LOT;
21
- export async function executeCheckoutCmd({ branchName, targetDir = process.cwd(), vcsFolderName = '.vcsgib', quiet = false, } = {}) {
22
- const lc = `${lcFile}[${executeCheckoutCmd.name}]`;
23
- try {
24
- if (logalot) {
25
- console.log(`${lc} starting... (I: 3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8e)`);
26
- }
27
- const trimmedBranchName = branchName?.trim();
28
- if (!trimmedBranchName) {
29
- throw new Error(`Branch name is required for checkout (E: 4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d)`);
30
- }
31
- const absTargetDir = path.resolve(targetDir);
32
- const { metaspace, localSpace, repoRoot, vcsPath } = await bootstrapVcsMetaspace({
33
- repoPath: absTargetDir,
34
- vcsFolderName,
35
- });
36
- // Verify repo exists
37
- try {
38
- await fs.access(vcsPath);
39
- }
40
- catch {
41
- throw new Error(`Not an ibgib repository (directory ${vcsPath} does not exist) (E: 5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0e)`);
42
- }
43
- // 1. Fetch authoritative repository index from localSpace
44
- const indexIbGib = await getB2tFSIndexIbGib({ space: localSpace, vcsPath });
45
- if (!indexIbGib) {
46
- throw new Error(`Repository index B2tFSIndexIbGib_V1 not found in localSpace (E: 6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f)`);
47
- }
48
- const previousBranch = indexIbGib.data?.activeBranch || 'main';
49
- // 2. Fetch all registered branch ibgibs
50
- const branchAddrs = [
51
- ...(indexIbGib.rel8ns?.branch || []),
52
- ...(indexIbGib.rel8ns?.branch_tjp || []),
53
- ];
54
- let branchIbGibs = [];
55
- if (branchAddrs.length > 0) {
56
- for (const bAddr of branchAddrs) {
57
- const bIbGib = await getIbGibWithMetaspaceFallback({
58
- addr: bAddr,
59
- space: localSpace,
60
- metaspace,
61
- });
62
- if (bIbGib) {
63
- branchIbGibs.push(bIbGib);
64
- }
65
- }
66
- }
67
- // Find target branch node
68
- const targetBranchIbGib = branchIbGibs.findLast((b) => b?.data?.name === trimmedBranchName);
69
- if (!targetBranchIbGib) {
70
- throw new Error(`Branch '${trimmedBranchName}' does not exist (E: 7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a)`);
71
- }
72
- // 3. Resolve target branch space b2s_<branchName>
73
- const targetBranchSpaceRes = await getOrCreateBranchSpace({
74
- metaspace,
75
- vcsPath,
76
- branchName: trimmedBranchName,
77
- });
78
- const targetBranchSpace = targetBranchSpaceRes.space;
79
- const targetBranchAddr = getIbGibAddr({ ibGib: targetBranchIbGib });
80
- const targetBranchTjpAddr = targetBranchIbGib.rel8ns?.tjp?.at(0) || targetBranchAddr;
81
- const latestTargetBranchRes = await getLatestAddrs({ space: targetBranchSpace, addrs: [targetBranchTjpAddr] });
82
- const latestTargetBranchAddr = latestTargetBranchRes?.data?.latestAddrs?.[0] || targetBranchAddr;
83
- const latestTargetBranchIbGib = (await getIbGibWithMetaspaceFallback({
84
- addr: latestTargetBranchAddr,
85
- space: targetBranchSpace,
86
- metaspace,
87
- })) || targetBranchIbGib;
88
- const rootItemAddr = latestTargetBranchIbGib.rel8ns?.b2tfs_item?.at(-1);
89
- if (!rootItemAddr) {
90
- throw new Error(`Branch '${trimmedBranchName}' does not have a valid root item address (E: 8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b)`);
91
- }
92
- await putInSpace({ space: targetBranchSpace, ibGib: targetBranchIbGib });
93
- // Update activeBranch in B2tFSIndexIbGib_V1 in targetBranchSpace and localSpace
94
- const updatedIndex = await updateB2tFSIndexIbGib({
95
- space: targetBranchSpace,
96
- metaspace,
97
- indexIbGib,
98
- dataToUpdate: {
99
- activeBranch: trimmedBranchName,
100
- activeSpaceId: getB2tFSBranchSpaceName(trimmedBranchName),
101
- mySpaceId: targetBranchSpaceRes.spaceId,
102
- },
103
- vcsPath,
104
- });
105
- if (localSpace !== targetBranchSpace) {
106
- await putInSpace({ space: localSpace, ibGib: updatedIndex });
107
- }
108
- // 4. Project branch snapshot onto worktree subfolder:
109
- // 'main' -> repoRoot
110
- // other branches -> repoRoot/b/<branch_name>/
111
- const isDefaultBranch = trimmedBranchName === 'main';
112
- const worktreePath = isDefaultBranch
113
- ? repoRoot
114
- : path.join(repoRoot, 'b', trimmedBranchName);
115
- await fs.mkdir(worktreePath, { recursive: true });
116
- // Retrieve root item and project branch snapshot onto worktree subfolder:
117
- // If rootItem is a single file, write it directly to worktreePath (my-repo/b/<branchName>/<fileName>).
118
- // If rootItem is a folder, write child items into worktreePath.
119
- const rootItem = await getIbGibWithMetaspaceFallback({
120
- addr: rootItemAddr,
121
- space: targetBranchSpace,
122
- metaspace,
123
- });
124
- if (rootItem) {
125
- if (rootItem.data?.fsType === 'file') {
126
- await writeB2tFSItemToFS({
127
- item: rootItem,
128
- destPath: worktreePath,
129
- space: targetBranchSpace,
130
- metaspace,
131
- });
132
- }
133
- else {
134
- const childAddrs = rootItem.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME] || [];
135
- for (const childAddr of childAddrs) {
136
- const childItem = await getIbGibWithMetaspaceFallback({
137
- addr: childAddr,
138
- space: targetBranchSpace,
139
- metaspace,
140
- });
141
- if (childItem) {
142
- await writeB2tFSItemToFS({
143
- item: childItem,
144
- destPath: worktreePath,
145
- space: targetBranchSpace,
146
- metaspace,
147
- });
148
- }
149
- }
150
- }
151
- }
152
- if (!quiet) {
153
- console.log(`Switched to branch '${trimmedBranchName}' (I: 9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c)`);
154
- console.log(` Worktree projection: ${worktreePath}`);
155
- }
156
- return {
157
- previousBranch,
158
- currentBranch: trimmedBranchName,
159
- branchAddr: targetBranchAddr,
160
- rootItemAddr,
161
- worktreePath,
162
- };
163
- }
164
- catch (error) {
165
- console.error(`${lc} ${extractErrorMsg(error)} (E: 0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d)`);
166
- throw error;
167
- }
168
- finally {
169
- if (logalot) {
170
- console.log(`${lc} complete. (I: 1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e)`);
171
- }
172
- }
173
- }
174
- //# sourceMappingURL=checkout-cmd.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkout-cmd.mjs","sourceRoot":"","sources":["../../../src/cli/commands/checkout-cmd.mts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- /**
2
- * @module commit-cmd
3
- *
4
- * Command handler for `vcs commit -m "message"`.
5
- * Ingests staged items and co-located .ib.*.md comment metadata files,
6
- * attaches comments to corresponding file and folder b2tfs_items,
7
- * attaches overall commit message to root b2tfs_item, evolves root item,
8
- * advances B2tFSBranchIbGib_V1 with committedPaths, and clears index staging area.
9
- */
10
- export interface CommitCmdOpts {
11
- message?: string;
12
- targetDir?: string;
13
- vcsFolderName?: string;
14
- quiet?: boolean;
15
- }
16
- export interface CommitCmdResult {
17
- commitAddr: string;
18
- commentAddr?: string;
19
- branchName: string;
20
- committedPaths: string[];
21
- rootItemAddr: string;
22
- }
23
- export declare function executeCommitCmd({ message, targetDir, vcsFolderName, quiet, }?: CommitCmdOpts): Promise<CommitCmdResult>;
24
- //# sourceMappingURL=commit-cmd.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commit-cmd.d.mts","sourceRoot":"","sources":["../../../src/cli/commands/commit-cmd.mts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA+BH,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,gBAAgB,CAAC,EACnC,OAAY,EACZ,SAAyB,EACzB,aAAyB,EACzB,KAAa,GAChB,GAAE,aAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmM/C"}
@@ -1,449 +0,0 @@
1
- /**
2
- * @module commit-cmd
3
- *
4
- * Command handler for `vcs commit -m "message"`.
5
- * Ingests staged items and co-located .ib.*.md comment metadata files,
6
- * attaches comments to corresponding file and folder b2tfs_items,
7
- * attaches overall commit message to root b2tfs_item, evolves root item,
8
- * advances B2tFSBranchIbGib_V1 with committedPaths, and clears index staging area.
9
- */
10
- import path from 'node:path';
11
- import fs from 'node:fs/promises';
12
- import crypto from 'node:crypto';
13
- import { getUUID, extractErrorMsg, delay } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
14
- import { Factory_V1 } from '@ibgib/ts-gib/dist/V1/factory.mjs';
15
- import { ROOT } from '@ibgib/ts-gib/dist/V1/constants.mjs';
16
- import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
17
- import { putInSpace, persistTransformResult } from '@ibgib/core-gib/dist/witness/space/space-helper.mjs';
18
- import { createCommentIbGib } from '@ibgib/core-gib/dist/common/comment/comment-helper.mjs';
19
- import { bootstrapVcsMetaspace } from '../../bootstrap/node-bootstrap.mjs';
20
- import { getOrCreateBranchSpace } from '../../engine/branch/branch-space-helper.mjs';
21
- import { B2TFS_CHILD_ITEM_REL8N_NAME } from '../../engine/item/item-types.mjs';
22
- import { getIbGibWithMetaspaceFallback, createB2tFSItemIbGib, evolveB2tFSItemIbGib } from '../../engine/item/item-helper.mjs';
23
- import { getB2tFSBranchSpaceName, resolveContextualBranchName } from '../../engine/branch/branch-helper.mjs';
24
- import { getB2tFSIndexIbGib, updateB2tFSIndexIbGib, getSpaceQualifiedIbGibAddr } from '../../engine/index/index-helper.mjs';
25
- import { isCommentMetadataFilename, extractCommentTopicName } from '../../engine/status/status-helper.mjs';
26
- import { GLOBAL_LOG_A_LOT } from '../../vcs-gib-constants.mjs';
27
- const lcFile = `[commit-cmd]`;
28
- const logalot = GLOBAL_LOG_A_LOT;
29
- export async function executeCommitCmd({ message = '', targetDir = process.cwd(), vcsFolderName = '.vcsgib', quiet = false, } = {}) {
30
- const lc = `${lcFile}[${executeCommitCmd.name}]`;
31
- try {
32
- if (logalot) {
33
- console.log(`${lc} starting executeCommitCmd (I: 9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d)`);
34
- }
35
- const absTargetDir = path.resolve(targetDir);
36
- const { metaspace, localSpace, vcsPath, repoRoot } = await bootstrapVcsMetaspace({
37
- repoPath: absTargetDir,
38
- vcsFolderName,
39
- });
40
- // Verify repo exists
41
- try {
42
- await fs.access(vcsPath);
43
- }
44
- catch {
45
- throw new Error(`Not an ibgib repository (directory ${vcsPath} does not exist) (E: 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d)`);
46
- }
47
- // Fetch authoritative repository index from localSpace
48
- const indexIbGib = await getB2tFSIndexIbGib({ space: localSpace, vcsPath });
49
- if (!indexIbGib) {
50
- throw new Error(`Repository index B2tFSIndexIbGib_V1 not found in localSpace (E: 3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f)`);
51
- }
52
- const branchName = resolveContextualBranchName({
53
- targetDir: absTargetDir,
54
- repoRoot,
55
- indexIbGib,
56
- });
57
- const activeWorktreeDir = branchName === 'main' ? repoRoot : path.join(repoRoot, 'b', branchName);
58
- // Target active branch space b2s_<activeBranch>
59
- const { space: activeSpace } = await getOrCreateBranchSpace({
60
- metaspace,
61
- vcsPath,
62
- branchName,
63
- });
64
- // Verify there are staged items
65
- const stagedPathsMap = { ...(indexIbGib.data?.stagedPaths || {}) };
66
- const committedPaths = Object.keys(stagedPathsMap);
67
- if (committedPaths.length === 0) {
68
- throw new Error(`Nothing to commit (no staged items found in index) (E: 4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a)`);
69
- }
70
- // Find active branch node
71
- let currentBranchIbGib;
72
- let currentBranchAddr;
73
- const branchAddrs = [
74
- ...(indexIbGib.rel8ns?.branch || []),
75
- ...(indexIbGib.rel8ns?.branch_tjp || []),
76
- ];
77
- if (branchAddrs.length > 0) {
78
- let branchIbGibs = [];
79
- for (const bAddr of branchAddrs) {
80
- const bIbGib = await getIbGibWithMetaspaceFallback({
81
- addr: bAddr,
82
- space: activeSpace,
83
- metaspace,
84
- });
85
- if (bIbGib) {
86
- branchIbGibs.push(bIbGib);
87
- }
88
- }
89
- currentBranchIbGib = branchIbGibs.findLast((b) => b?.data?.name === branchName) || branchIbGibs.at(-1);
90
- if (currentBranchIbGib) {
91
- currentBranchAddr = getIbGibAddr({ ibGib: currentBranchIbGib });
92
- }
93
- }
94
- const currentRootAddr = currentBranchIbGib?.rel8ns?.b2tFS_item?.at(-1) || currentBranchIbGib?.rel8ns?.b2tfs_item?.at(-1);
95
- // 1. Evolve root item graph with staged items and ingest co-located .ib.*.md comment files
96
- const repoName = path.basename(repoRoot) || 'root';
97
- let { newRootItem, newRootAddr, ingestedCommentCount } = await commitCmd_buildEvolvedRootItem({
98
- currentRootAddr,
99
- stagedPathsMap,
100
- space: activeSpace,
101
- metaspace,
102
- repoName,
103
- worktreeDir: activeWorktreeDir,
104
- });
105
- if ((!message || message.trim().length === 0) && ingestedCommentCount === 0) {
106
- throw new Error(`Commit message is required (-m "message" or companion comment files) (E: 2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e)`);
107
- }
108
- // 2. If CLI message is provided, attach CommentIbGib to the root b2tfs item
109
- let commentAddr;
110
- if (message && message.trim().length > 0) {
111
- const commentRes = await createCommentIbGib({
112
- text: message.trim(),
113
- saveInSpace: true,
114
- space: activeSpace,
115
- });
116
- const commentIbGib = commentRes.newIbGib;
117
- commentAddr = getIbGibAddr({ ibGib: commentIbGib });
118
- await metaspace.registerNewIbGib({ ibGib: commentIbGib, space: activeSpace });
119
- const existingComments = newRootItem.rel8ns?.comment || [];
120
- const evolveRootRes = await evolveB2tFSItemIbGib({
121
- existingItem: newRootItem,
122
- rel8nsToUpdate: {
123
- comment: [...existingComments, commentAddr],
124
- },
125
- });
126
- await persistTransformResult({ resTransform: evolveRootRes, space: activeSpace });
127
- await metaspace.registerNewIbGib({ ibGib: evolveRootRes.newIbGib, space: activeSpace });
128
- newRootItem = evolveRootRes.newIbGib;
129
- newRootAddr = getIbGibAddr({ ibGib: newRootItem });
130
- }
131
- // 3. Advance B2tFSBranchIbGib_V1 node inside activeSpace
132
- const branchUuid = currentBranchIbGib?.data?.uuid || (await getUUID());
133
- const newBranchRes = await Factory_V1.firstGen({
134
- parentIbGib: currentBranchIbGib || ROOT,
135
- ib: `b2tfs_branch ${branchName} v1 ${branchUuid}`,
136
- data: {
137
- ...(currentBranchIbGib?.data || {}),
138
- name: branchName,
139
- uuid: branchUuid,
140
- classname: 'B2tFSBranchIbGib_V1',
141
- committedAt: new Date().toISOString(),
142
- committedPaths,
143
- },
144
- rel8ns: {
145
- b2tfs_item: [newRootAddr],
146
- ...(commentAddr ? { comment: [commentAddr] } : {}),
147
- },
148
- });
149
- const newBranchIbGib = newBranchRes.newIbGib;
150
- const newBranchAddr = getIbGibAddr({ ibGib: newBranchIbGib });
151
- await persistTransformResult({ resTransform: newBranchRes, space: activeSpace });
152
- await metaspace.registerNewIbGib({ ibGib: newBranchIbGib, space: activeSpace });
153
- const sqBranchAddr = getSpaceQualifiedIbGibAddr({
154
- spaceId: activeSpace.data?.spaceSubPath || activeSpace.data?.name || getB2tFSBranchSpaceName(branchName),
155
- ibGibAddr: newBranchAddr,
156
- });
157
- // 4. Update B2tFSIndexIbGib_V1 in activeSpace & localSpace
158
- const updatedIndex = await updateB2tFSIndexIbGib({
159
- space: activeSpace,
160
- metaspace,
161
- indexIbGib,
162
- dataToUpdate: {
163
- stagedPaths: {},
164
- staged_item: [],
165
- },
166
- rel8nsToUpdate: {
167
- branch: [sqBranchAddr],
168
- branch_tjp: [sqBranchAddr],
169
- },
170
- vcsPath,
171
- });
172
- if (localSpace !== activeSpace) {
173
- await putInSpace({ space: localSpace, ibGib: updatedIndex });
174
- }
175
- if (!quiet) {
176
- const shortGib = newBranchIbGib.gib ? newBranchIbGib.gib.slice(0, 7) : 'commit';
177
- const logMsg = message ? message.trim() : '(committed)';
178
- console.log(`[${branchName} ${shortGib}] ${logMsg} (I: 5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b)`);
179
- console.log(` ${committedPaths.length} file(s) changed`);
180
- }
181
- return {
182
- commitAddr: newBranchAddr,
183
- commentAddr,
184
- branchName,
185
- committedPaths,
186
- rootItemAddr: newRootAddr,
187
- };
188
- }
189
- catch (error) {
190
- console.error(`${lc} ${extractErrorMsg(error)} (E: 6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c)`);
191
- throw error;
192
- }
193
- finally {
194
- await delay(50);
195
- if (logalot) {
196
- console.log(`${lc} complete. (I: 7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d)`);
197
- }
198
- }
199
- }
200
- // #region commitCmd_buildEvolvedRootItem
201
- async function commitCmd_buildEvolvedRootItem({ currentRootAddr, stagedPathsMap, space, metaspace, repoName, worktreeDir, }) {
202
- let ingestedCommentCount = 0;
203
- const itemsByRelPath = new Map();
204
- if (currentRootAddr) {
205
- const currentRootItem = await getIbGibWithMetaspaceFallback({
206
- addr: currentRootAddr,
207
- space,
208
- metaspace,
209
- });
210
- if (currentRootItem) {
211
- await commitCmd_walkBranchGraph({
212
- item: currentRootItem,
213
- space,
214
- metaspace,
215
- currentRelPath: '',
216
- outMap: itemsByRelPath,
217
- });
218
- }
219
- }
220
- // Overlay staged items
221
- for (const [relPath, stagedRec] of Object.entries(stagedPathsMap)) {
222
- itemsByRelPath.set(relPath, {
223
- itemAddr: stagedRec.itemAddr,
224
- fsType: stagedRec.fsType || 'file',
225
- });
226
- }
227
- // 1. Ingest co-located .ib.<filename>.md comment files for staged files
228
- for (const [relPath, itemRec] of itemsByRelPath.entries()) {
229
- if (itemRec.fsType !== 'file') {
230
- continue;
231
- }
232
- const dir = path.dirname(relPath);
233
- const base = path.basename(relPath);
234
- const commentDir = dir === '.' ? worktreeDir : path.join(worktreeDir, dir);
235
- const commentFullPath = path.join(commentDir, `.ib.${base}.md`);
236
- let commentText = '';
237
- try {
238
- commentText = await fs.readFile(commentFullPath, 'utf8');
239
- }
240
- catch {
241
- // No comment file for this file
242
- continue;
243
- }
244
- if (commentText.trim().length > 0) {
245
- const commentRes = await createCommentIbGib({
246
- text: commentText.trim(),
247
- saveInSpace: true,
248
- space,
249
- });
250
- const commentIbGib = commentRes.newIbGib;
251
- const commentAddr = getIbGibAddr({ ibGib: commentIbGib });
252
- await metaspace.registerNewIbGib({ ibGib: commentIbGib, space });
253
- ingestedCommentCount++;
254
- const currentItem = itemRec.item || await getIbGibWithMetaspaceFallback({
255
- addr: itemRec.itemAddr,
256
- space,
257
- metaspace,
258
- });
259
- if (currentItem) {
260
- const existingComments = currentItem.rel8ns?.comment || [];
261
- const evolvedItemRes = await evolveB2tFSItemIbGib({
262
- existingItem: currentItem,
263
- rel8nsToUpdate: {
264
- comment: [...existingComments, commentAddr],
265
- },
266
- });
267
- await persistTransformResult({ resTransform: evolvedItemRes, space });
268
- await metaspace.registerNewIbGib({ ibGib: evolvedItemRes.newIbGib, space });
269
- itemRec.itemAddr = getIbGibAddr({ ibGib: evolvedItemRes.newIbGib });
270
- itemRec.item = evolvedItemRes.newIbGib;
271
- }
272
- try {
273
- await fs.unlink(commentFullPath);
274
- }
275
- catch {
276
- // Delete failed / ignore
277
- }
278
- }
279
- }
280
- // Ensure parent folder entries exist for all items
281
- const allRelPaths = Array.from(itemsByRelPath.keys());
282
- for (const relPath of allRelPaths) {
283
- const parts = relPath.split('/');
284
- parts.pop(); // Remove file/folder name to get parent path
285
- let currentFolderRel = '';
286
- for (const part of parts) {
287
- currentFolderRel = currentFolderRel ? `${currentFolderRel}/${part}` : part;
288
- if (!itemsByRelPath.has(currentFolderRel)) {
289
- itemsByRelPath.set(currentFolderRel, { itemAddr: '', fsType: 'folder' });
290
- }
291
- }
292
- }
293
- // Collect all folder paths (including root '')
294
- const folderPathsSet = new Set();
295
- folderPathsSet.add('');
296
- for (const [relPath, itemRec] of itemsByRelPath.entries()) {
297
- if (itemRec.fsType === 'folder' || relPath === '') {
298
- folderPathsSet.add(relPath);
299
- }
300
- }
301
- // Sort folders deepest path first so children folders are built before parents
302
- const sortedFolders = Array.from(folderPathsSet).sort((a, b) => {
303
- const depthA = a ? a.split('/').length : 0;
304
- const depthB = b ? b.split('/').length : 0;
305
- return depthB - depthA;
306
- });
307
- const createdFolderAddrs = new Map();
308
- let rootFolderItem;
309
- let rootFolderAddr = '';
310
- for (const folderRelPath of sortedFolders) {
311
- const childAddrs = [];
312
- for (const [itemRelPath, itemRec] of itemsByRelPath.entries()) {
313
- if (!itemRelPath || itemRelPath === folderRelPath) {
314
- continue;
315
- }
316
- const parentRelPath = commitCmd_getParentRelPath(itemRelPath);
317
- if (parentRelPath === folderRelPath) {
318
- if (itemRec.fsType === 'folder') {
319
- const folderAddr = createdFolderAddrs.get(itemRelPath);
320
- if (folderAddr && !childAddrs.includes(folderAddr)) {
321
- childAddrs.push(folderAddr);
322
- }
323
- }
324
- else {
325
- if (itemRec.itemAddr && !childAddrs.includes(itemRec.itemAddr)) {
326
- childAddrs.push(itemRec.itemAddr);
327
- }
328
- }
329
- }
330
- }
331
- // Check for folder-level .ib.<topic>.md files in this folder
332
- const folderDiskPath = folderRelPath ? path.join(worktreeDir, folderRelPath) : worktreeDir;
333
- const folderCommentAddrs = [];
334
- try {
335
- const dirents = await fs.readdir(folderDiskPath, { withFileTypes: true });
336
- for (const dirent of dirents) {
337
- if (dirent.isFile() && isCommentMetadataFilename(dirent.name)) {
338
- const topicName = extractCommentTopicName(dirent.name);
339
- const isCoLocatedFileComment = itemsByRelPath.has(folderRelPath ? `${folderRelPath}/${topicName}` : topicName);
340
- if (!isCoLocatedFileComment) {
341
- const fullCommentPath = path.join(folderDiskPath, dirent.name);
342
- const commentContent = await fs.readFile(fullCommentPath, 'utf8');
343
- if (commentContent.trim().length > 0) {
344
- const commentRes = await createCommentIbGib({
345
- text: commentContent.trim(),
346
- saveInSpace: true,
347
- space,
348
- });
349
- const commentIbGib = commentRes.newIbGib;
350
- const cAddr = getIbGibAddr({ ibGib: commentIbGib });
351
- await metaspace.registerNewIbGib({ ibGib: commentIbGib, space });
352
- folderCommentAddrs.push(cAddr);
353
- ingestedCommentCount++;
354
- }
355
- try {
356
- await fs.unlink(fullCommentPath);
357
- }
358
- catch {
359
- // ignore delete error
360
- }
361
- }
362
- }
363
- }
364
- }
365
- catch {
366
- // Folder may not exist on disk
367
- }
368
- const folderName = folderRelPath ? path.basename(folderRelPath) : repoName;
369
- const nameHash = crypto.createHash('sha256').update(folderName).digest('hex');
370
- const existingFolderRec = itemsByRelPath.get(folderRelPath);
371
- let folderRes;
372
- if (existingFolderRec && existingFolderRec.item) {
373
- const oldChildAddrs = existingFolderRec.item.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME] || [];
374
- const toRemoveChildAddrs = oldChildAddrs.filter(a => !childAddrs.includes(a));
375
- const existingComments = existingFolderRec.item.rel8ns?.comment || [];
376
- folderRes = await evolveB2tFSItemIbGib({
377
- existingItem: existingFolderRec.item,
378
- dataToUpdate: {
379
- nameHash,
380
- },
381
- rel8nsToUpdate: {
382
- ...(childAddrs.length > 0 ? { [B2TFS_CHILD_ITEM_REL8N_NAME]: childAddrs } : {}),
383
- ...(folderCommentAddrs.length > 0 ? { comment: [...existingComments, ...folderCommentAddrs] } : {}),
384
- },
385
- rel8nsToRemove: toRemoveChildAddrs.length > 0 ? { [B2TFS_CHILD_ITEM_REL8N_NAME]: toRemoveChildAddrs } : undefined,
386
- });
387
- }
388
- else {
389
- folderRes = await createB2tFSItemIbGib({
390
- fsType: 'folder',
391
- name: folderName,
392
- data: {
393
- nameHash,
394
- },
395
- rel8ns: {
396
- ...(childAddrs.length > 0 ? { [B2TFS_CHILD_ITEM_REL8N_NAME]: childAddrs } : {}),
397
- ...(folderCommentAddrs.length > 0 ? { comment: folderCommentAddrs } : {}),
398
- },
399
- });
400
- }
401
- const folderItem = folderRes.newIbGib;
402
- const folderAddr = getIbGibAddr({ ibGib: folderItem });
403
- await persistTransformResult({ resTransform: folderRes, space });
404
- await metaspace.registerNewIbGib({ ibGib: folderItem, space });
405
- createdFolderAddrs.set(folderRelPath, folderAddr);
406
- if (folderRelPath === '') {
407
- rootFolderItem = folderItem;
408
- rootFolderAddr = folderAddr;
409
- }
410
- }
411
- return { newRootItem: rootFolderItem, newRootAddr: rootFolderAddr, ingestedCommentCount };
412
- }
413
- function commitCmd_getParentRelPath(relPath) {
414
- const parts = relPath.split('/');
415
- parts.pop();
416
- return parts.join('/');
417
- }
418
- async function commitCmd_walkBranchGraph({ item, space, metaspace, currentRelPath, outMap, }) {
419
- if (!item || !item.data) {
420
- return;
421
- }
422
- const { fsType } = item.data;
423
- const itemAddr = getIbGibAddr({ ibGib: item });
424
- outMap.set(currentRelPath, { itemAddr, fsType, item });
425
- if (fsType === 'folder') {
426
- const childAddrs = item.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME] || [];
427
- for (const childAddr of childAddrs) {
428
- const childItem = await getIbGibWithMetaspaceFallback({
429
- addr: childAddr,
430
- space,
431
- metaspace,
432
- });
433
- if (childItem && childItem.data) {
434
- const childRelPath = currentRelPath
435
- ? `${currentRelPath}/${childItem.data.name}`
436
- : childItem.data.name;
437
- await commitCmd_walkBranchGraph({
438
- item: childItem,
439
- space,
440
- metaspace,
441
- currentRelPath: childRelPath,
442
- outMap,
443
- });
444
- }
445
- }
446
- }
447
- }
448
- // #endregion commitCmd_buildEvolvedRootItem
449
- //# sourceMappingURL=commit-cmd.mjs.map