@ibgib/vcs-gib 0.0.6 → 0.0.18

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 (185) hide show
  1. package/README.md +24 -2
  2. package/VCS_CLI_USER_GUIDE.md +2 -2
  3. package/dist/AUTO-GENERATED-version.d.mts +1 -1
  4. package/dist/AUTO-GENERATED-version.d.mts.map +1 -1
  5. package/dist/AUTO-GENERATED-version.mjs +1 -1
  6. package/dist/AUTO-GENERATED-version.mjs.map +1 -1
  7. package/dist/bootstrap/node-bootstrap.d.mts.map +1 -1
  8. package/dist/bootstrap/node-bootstrap.mjs +9 -0
  9. package/dist/bootstrap/node-bootstrap.mjs.map +1 -1
  10. package/dist/bootstrap/{node-bootstrap.respec.node.d.mts → node-bootstrap.respec.d.mts} +1 -1
  11. package/dist/bootstrap/node-bootstrap.respec.d.mts.map +1 -0
  12. package/dist/bootstrap/{node-bootstrap.respec.node.mjs → node-bootstrap.respec.mjs} +1 -1
  13. package/dist/bootstrap/node-bootstrap.respec.mjs.map +1 -0
  14. package/dist/cli/cli-arg-parser.d.mts +3 -0
  15. package/dist/cli/cli-arg-parser.d.mts.map +1 -1
  16. package/dist/cli/cli-arg-parser.mjs +13 -1
  17. package/dist/cli/cli-arg-parser.mjs.map +1 -1
  18. package/dist/cli/{cli-arg-parser.respec.node.d.mts → cli-arg-parser.respec.d.mts} +1 -1
  19. package/dist/cli/cli-arg-parser.respec.d.mts.map +1 -0
  20. package/dist/cli/{cli-arg-parser.respec.node.mjs → cli-arg-parser.respec.mjs} +1 -1
  21. package/dist/cli/cli-arg-parser.respec.mjs.map +1 -0
  22. package/dist/cli/cli-constants.d.mts +6 -0
  23. package/dist/cli/cli-constants.d.mts.map +1 -1
  24. package/dist/cli/cli-constants.mjs +24 -0
  25. package/dist/cli/cli-constants.mjs.map +1 -1
  26. package/dist/cli/{cli-e2e.respec.node.d.mts → cli-e2e.respec.d.mts} +1 -1
  27. package/dist/cli/cli-e2e.respec.d.mts.map +1 -0
  28. package/dist/cli/{cli-e2e.respec.node.mjs → cli-e2e.respec.mjs} +2 -2
  29. package/dist/cli/cli-e2e.respec.mjs.map +1 -0
  30. package/dist/cli/commands/add-cmd.d.mts.map +1 -1
  31. package/dist/cli/commands/add-cmd.mjs +35 -30
  32. package/dist/cli/commands/add-cmd.mjs.map +1 -1
  33. package/dist/cli/commands/{branch-checkout-cmd.respec.node.d.mts → branch-checkout-cmd.respec.d.mts} +1 -1
  34. package/dist/cli/commands/branch-checkout-cmd.respec.d.mts.map +1 -0
  35. package/dist/cli/commands/{branch-checkout-cmd.respec.node.mjs → branch-checkout-cmd.respec.mjs} +172 -8
  36. package/dist/cli/commands/branch-checkout-cmd.respec.mjs.map +1 -0
  37. package/dist/cli/commands/branch-cmd.d.mts +2 -1
  38. package/dist/cli/commands/branch-cmd.d.mts.map +1 -1
  39. package/dist/cli/commands/branch-cmd.mjs +59 -8
  40. package/dist/cli/commands/branch-cmd.mjs.map +1 -1
  41. package/dist/cli/commands/checkout-cmd.d.mts.map +1 -1
  42. package/dist/cli/commands/checkout-cmd.mjs +38 -18
  43. package/dist/cli/commands/checkout-cmd.mjs.map +1 -1
  44. package/dist/cli/commands/commit-cmd.d.mts.map +1 -1
  45. package/dist/cli/commands/commit-cmd.mjs +26 -23
  46. package/dist/cli/commands/commit-cmd.mjs.map +1 -1
  47. package/dist/cli/commands/{commit-log-cmd.respec.node.d.mts → commit-log-cmd.respec.d.mts} +1 -1
  48. package/dist/cli/commands/commit-log-cmd.respec.d.mts.map +1 -0
  49. package/dist/cli/commands/{commit-log-cmd.respec.node.mjs → commit-log-cmd.respec.mjs} +1 -1
  50. package/dist/cli/commands/commit-log-cmd.respec.mjs.map +1 -0
  51. package/dist/cli/commands/{init-cmd.respec.node.d.mts → init-cmd.respec.d.mts} +1 -1
  52. package/dist/cli/commands/init-cmd.respec.d.mts.map +1 -0
  53. package/dist/cli/commands/{init-cmd.respec.node.mjs → init-cmd.respec.mjs} +1 -1
  54. package/dist/cli/commands/init-cmd.respec.mjs.map +1 -0
  55. package/dist/cli/commands/merge-cmd.d.mts +23 -0
  56. package/dist/cli/commands/merge-cmd.d.mts.map +1 -0
  57. package/dist/cli/commands/merge-cmd.mjs +224 -0
  58. package/dist/cli/commands/merge-cmd.mjs.map +1 -0
  59. package/dist/cli/commands/reset-cmd.d.mts +21 -0
  60. package/dist/cli/commands/reset-cmd.d.mts.map +1 -0
  61. package/dist/cli/commands/reset-cmd.mjs +93 -0
  62. package/dist/cli/commands/reset-cmd.mjs.map +1 -0
  63. package/dist/cli/commands/reset-restore-cmd.respec.d.mts +7 -0
  64. package/dist/cli/commands/reset-restore-cmd.respec.d.mts.map +1 -0
  65. package/dist/cli/commands/reset-restore-cmd.respec.mjs +185 -0
  66. package/dist/cli/commands/reset-restore-cmd.respec.mjs.map +1 -0
  67. package/dist/cli/commands/restore-cmd.d.mts +22 -0
  68. package/dist/cli/commands/restore-cmd.d.mts.map +1 -0
  69. package/dist/cli/commands/restore-cmd.mjs +115 -0
  70. package/dist/cli/commands/restore-cmd.mjs.map +1 -0
  71. package/dist/cli/commands/{status-add-cmd.respec.node.d.mts → status-add-cmd.respec.d.mts} +1 -1
  72. package/dist/cli/commands/status-add-cmd.respec.d.mts.map +1 -0
  73. package/dist/cli/commands/{status-add-cmd.respec.node.mjs → status-add-cmd.respec.mjs} +25 -1
  74. package/dist/cli/commands/status-add-cmd.respec.mjs.map +1 -0
  75. package/dist/cli/vcs-cli-main.d.mts.map +1 -1
  76. package/dist/cli/vcs-cli-main.mjs +36 -3
  77. package/dist/cli/vcs-cli-main.mjs.map +1 -1
  78. package/dist/engine/branch/branch-graph-helper.d.mts +12 -3
  79. package/dist/engine/branch/branch-graph-helper.d.mts.map +1 -1
  80. package/dist/engine/branch/branch-graph-helper.mjs +50 -18
  81. package/dist/engine/branch/branch-graph-helper.mjs.map +1 -1
  82. package/dist/engine/branch/branch-space-helper.d.mts +1 -0
  83. package/dist/engine/branch/branch-space-helper.d.mts.map +1 -1
  84. package/dist/engine/branch/branch-space-helper.mjs +1 -0
  85. package/dist/engine/branch/branch-space-helper.mjs.map +1 -1
  86. package/dist/engine/branch/{branch-space.respec.node.d.mts → branch-space.respec.d.mts} +1 -1
  87. package/dist/engine/branch/branch-space.respec.d.mts.map +1 -0
  88. package/dist/engine/branch/{branch-space.respec.node.mjs → branch-space.respec.mjs} +12 -7
  89. package/dist/engine/branch/branch-space.respec.mjs.map +1 -0
  90. package/dist/engine/diff/{line-diff-helper.respec.node.d.mts → line-diff-helper.respec.d.mts} +1 -1
  91. package/dist/engine/diff/line-diff-helper.respec.d.mts.map +1 -0
  92. package/dist/engine/diff/{line-diff-helper.respec.node.mjs → line-diff-helper.respec.mjs} +1 -1
  93. package/dist/engine/diff/line-diff-helper.respec.mjs.map +1 -0
  94. package/dist/engine/filter/{glob-helper.respec.node.d.mts → glob-helper.respec.d.mts} +1 -1
  95. package/dist/engine/filter/glob-helper.respec.d.mts.map +1 -0
  96. package/dist/engine/filter/{glob-helper.respec.node.mjs → glob-helper.respec.mjs} +1 -1
  97. package/dist/engine/filter/glob-helper.respec.mjs.map +1 -0
  98. package/dist/engine/index/index-helper.d.mts +35 -0
  99. package/dist/engine/index/index-helper.d.mts.map +1 -1
  100. package/dist/engine/index/index-helper.mjs +241 -0
  101. package/dist/engine/index/index-helper.mjs.map +1 -1
  102. package/dist/engine/item/item-helper.d.mts +29 -3
  103. package/dist/engine/item/item-helper.d.mts.map +1 -1
  104. package/dist/engine/item/item-helper.mjs +234 -56
  105. package/dist/engine/item/item-helper.mjs.map +1 -1
  106. package/dist/engine/item/item.respec.d.mts +7 -0
  107. package/dist/engine/item/item.respec.d.mts.map +1 -0
  108. package/dist/engine/item/item.respec.mjs +75 -0
  109. package/dist/engine/item/item.respec.mjs.map +1 -0
  110. package/dist/engine/merge/b2tfs-3way-merge-strategy.d.mts +38 -0
  111. package/dist/engine/merge/b2tfs-3way-merge-strategy.d.mts.map +1 -0
  112. package/dist/engine/merge/b2tfs-3way-merge-strategy.mjs +593 -0
  113. package/dist/engine/merge/b2tfs-3way-merge-strategy.mjs.map +1 -0
  114. package/dist/engine/merge/b2tfs-merge-strategy.respec.d.mts +7 -0
  115. package/dist/engine/merge/b2tfs-merge-strategy.respec.d.mts.map +1 -0
  116. package/dist/engine/merge/b2tfs-merge-strategy.respec.mjs +335 -0
  117. package/dist/engine/merge/b2tfs-merge-strategy.respec.mjs.map +1 -0
  118. package/dist/respec-gib.node.mjs +1 -1
  119. package/dist/respec-gib.node.mjs.map +1 -1
  120. package/dist/{vcs-gib.respec.node.d.mts → vcs-gib.respec.d.mts} +1 -1
  121. package/dist/vcs-gib.respec.d.mts.map +1 -0
  122. package/dist/{vcs-gib.respec.node.mjs → vcs-gib.respec.mjs} +1 -1
  123. package/dist/vcs-gib.respec.mjs.map +1 -0
  124. package/package.json +3 -3
  125. package/src/AUTO-GENERATED-version.mts +1 -1
  126. package/src/bootstrap/node-bootstrap.mts +6 -0
  127. package/src/cli/cli-arg-parser.mts +15 -0
  128. package/src/cli/cli-constants.mts +27 -0
  129. package/src/cli/{cli-e2e.respec.node.mts → cli-e2e.respec.mts} +2 -2
  130. package/src/cli/commands/add-cmd.mts +41 -29
  131. package/src/cli/commands/{branch-checkout-cmd.respec.node.mts → branch-checkout-cmd.respec.mts} +190 -8
  132. package/src/cli/commands/branch-cmd.mts +78 -8
  133. package/src/cli/commands/checkout-cmd.mts +48 -23
  134. package/src/cli/commands/commit-cmd.mts +35 -26
  135. package/src/cli/commands/merge-cmd.mts +289 -0
  136. package/src/cli/commands/reset-cmd.mts +128 -0
  137. package/src/cli/commands/reset-restore-cmd.respec.mts +222 -0
  138. package/src/cli/commands/restore-cmd.mts +155 -0
  139. package/src/cli/commands/{status-add-cmd.respec.node.mts → status-add-cmd.respec.mts} +27 -0
  140. package/src/cli/vcs-cli-main.mts +36 -3
  141. package/src/engine/branch/branch-graph-helper.mts +66 -18
  142. package/src/engine/branch/branch-space-helper.mts +6 -0
  143. package/src/engine/branch/{branch-space.respec.node.mts → branch-space.respec.mts} +12 -6
  144. package/src/engine/index/index-helper.mts +324 -0
  145. package/src/engine/item/item-helper.mts +284 -58
  146. package/src/engine/item/item.respec.mts +92 -0
  147. package/src/engine/merge/b2tfs-3way-merge-strategy.mts +725 -0
  148. package/src/engine/merge/b2tfs-merge-strategy.respec.mts +438 -0
  149. package/src/respec-gib.node.mts +2 -2
  150. package/tsconfig.tsbuildinfo +1 -1
  151. package/dist/bootstrap/node-bootstrap.respec.node.d.mts.map +0 -1
  152. package/dist/bootstrap/node-bootstrap.respec.node.mjs.map +0 -1
  153. package/dist/cli/cli-arg-parser.respec.node.d.mts.map +0 -1
  154. package/dist/cli/cli-arg-parser.respec.node.mjs.map +0 -1
  155. package/dist/cli/cli-e2e.respec.node.d.mts.map +0 -1
  156. package/dist/cli/cli-e2e.respec.node.mjs.map +0 -1
  157. package/dist/cli/commands/branch-checkout-cmd.respec.node.d.mts.map +0 -1
  158. package/dist/cli/commands/branch-checkout-cmd.respec.node.mjs.map +0 -1
  159. package/dist/cli/commands/commit-log-cmd.respec.node.d.mts.map +0 -1
  160. package/dist/cli/commands/commit-log-cmd.respec.node.mjs.map +0 -1
  161. package/dist/cli/commands/init-cmd.respec.node.d.mts.map +0 -1
  162. package/dist/cli/commands/init-cmd.respec.node.mjs.map +0 -1
  163. package/dist/cli/commands/status-add-cmd.respec.node.d.mts.map +0 -1
  164. package/dist/cli/commands/status-add-cmd.respec.node.mjs.map +0 -1
  165. package/dist/engine/branch/branch-space.respec.node.d.mts.map +0 -1
  166. package/dist/engine/branch/branch-space.respec.node.mjs.map +0 -1
  167. package/dist/engine/diff/line-diff-helper.respec.node.d.mts.map +0 -1
  168. package/dist/engine/diff/line-diff-helper.respec.node.mjs.map +0 -1
  169. package/dist/engine/filter/glob-helper.respec.node.d.mts.map +0 -1
  170. package/dist/engine/filter/glob-helper.respec.node.mjs.map +0 -1
  171. package/dist/vcs-gib.respec.node.d.mts.map +0 -1
  172. package/dist/vcs-gib.respec.node.mjs.map +0 -1
  173. package/test_runs/001-hello-node/20260728_090100_0001-flow-core-main.md +0 -39
  174. package/test_runs/001-hello-node/20260728_090200_0003-flow-branching-worktree.md +0 -54
  175. package/test_runs/001-hello-node/20260728_090300_0002-flow-selective-add.md +0 -45
  176. package/test_runs/001-hello-node/20260728_142100_0007-flow-edge-cases.md +0 -44
  177. package/test_runs/001-hello-node/20260728_142400_0005-flow-hardcoded-ignores.md +0 -36
  178. package/tools/pack-for-test.mjs +0 -73
  179. /package/src/bootstrap/{node-bootstrap.respec.node.mts → node-bootstrap.respec.mts} +0 -0
  180. /package/src/cli/{cli-arg-parser.respec.node.mts → cli-arg-parser.respec.mts} +0 -0
  181. /package/src/cli/commands/{commit-log-cmd.respec.node.mts → commit-log-cmd.respec.mts} +0 -0
  182. /package/src/cli/commands/{init-cmd.respec.node.mts → init-cmd.respec.mts} +0 -0
  183. /package/src/engine/diff/{line-diff-helper.respec.node.mts → line-diff-helper.respec.mts} +0 -0
  184. /package/src/engine/filter/{glob-helper.respec.node.mts → glob-helper.respec.mts} +0 -0
  185. /package/src/{vcs-gib.respec.node.mts → vcs-gib.respec.mts} +0 -0
@@ -0,0 +1,335 @@
1
+ /**
2
+ * @module b2tfs-merge-strategy.respec.node
3
+ *
4
+ * In-memory respec unit tests for B2tFSItem3WayMergeStrategy.
5
+ */
6
+ import { respecfully, ifWe, iReckon } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
7
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
8
+ import { getGib } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
9
+ import { hash } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
10
+ import { InnerSpace_V1 } from '@ibgib/core-gib/dist/witness/space/inner-space/inner-space-v1.mjs';
11
+ import { DEFAULT_INNER_SPACE_DATA_V1 } from '@ibgib/core-gib/dist/witness/space/inner-space/inner-space-types.mjs';
12
+ import { persistTransformResult, registerNewIbGib, getFromSpace, putInSpace } from '@ibgib/core-gib/dist/witness/space/space-helper.mjs';
13
+ import { graftTimelines } from '@ibgib/core-gib/dist/sync/graft-info/graft-info-helpers.mjs';
14
+ import { SyncConflictStrategy } from '@ibgib/core-gib/dist/sync/sync-constants.mjs';
15
+ import { GraftPreference } from '@ibgib/core-gib/dist/sync/graft-info/graft-info-types.mjs';
16
+ import { getBinIb } from '@ibgib/core-gib/dist/common/other/ibgib-helper.mjs';
17
+ import { createB2tFSItemIbGib, evolveB2tFSItemIbGib } from '../item/item-helper.mjs';
18
+ import { BINARY_REL8N_NAME, B2TFS_CHILD_ITEM_REL8N_NAME } from '../item/item-types.mjs';
19
+ import { B2tFS3WayGraftStrategy, B2tFSItem3WayMergeStrategy } from './b2tfs-3way-merge-strategy.mjs';
20
+ const lc = `[apps/vcs-gib/src/engine/merge/b2tfs-merge-strategy.respec.node.mts]`;
21
+ function binDataToText(data) {
22
+ if (!data) {
23
+ return '';
24
+ }
25
+ if (typeof data === 'string') {
26
+ return data;
27
+ }
28
+ if (typeof data.text === 'string') {
29
+ return data.text;
30
+ }
31
+ if (typeof data.data === 'string') {
32
+ return data.data;
33
+ }
34
+ if (data instanceof Uint8Array || Buffer.isBuffer(data)) {
35
+ return new TextDecoder('utf8').decode(data);
36
+ }
37
+ if (typeof data === 'object') {
38
+ const vals = Object.values(data);
39
+ const bytes = new Uint8Array(vals);
40
+ return new TextDecoder('utf8').decode(bytes);
41
+ }
42
+ return String(data);
43
+ }
44
+ async function createFileWithContent({ name, content, space, }) {
45
+ const textStr = typeof content === 'string' ? content : new TextDecoder('utf8').decode(content);
46
+ const dataBuffer = typeof content === 'string' ? Buffer.from(content, 'utf8') : content;
47
+ const fileHash = await hash({ s: textStr });
48
+ const fileExt = name.includes('.') ? name.split('.').pop() || 'txt' : 'txt';
49
+ const binIb = getBinIb({
50
+ binHash: fileHash,
51
+ binExt: fileExt,
52
+ binEncoding: 'utf8',
53
+ });
54
+ const binIbGib = {
55
+ ib: binIb,
56
+ data: dataBuffer,
57
+ };
58
+ binIbGib.gib = await getGib({ ibGib: binIbGib, hasTjp: false });
59
+ const binAddr = getIbGibAddr({ ibGib: binIbGib });
60
+ await putInSpace({ ibGib: binIbGib, space });
61
+ await registerNewIbGib({ ibGib: binIbGib, space });
62
+ const itemRes = await createB2tFSItemIbGib({
63
+ fsType: 'file',
64
+ name,
65
+ rel8ns: {
66
+ [BINARY_REL8N_NAME]: [binAddr],
67
+ },
68
+ });
69
+ await persistTransformResult({ resTransform: itemRes, space });
70
+ await registerNewIbGib({ ibGib: itemRes.newIbGib, space });
71
+ return itemRes.newIbGib;
72
+ }
73
+ async function evolveFileContent({ existingItem, newContent, space, }) {
74
+ const textStr = typeof newContent === 'string' ? newContent : new TextDecoder('utf8').decode(newContent);
75
+ const dataBuffer = typeof newContent === 'string' ? Buffer.from(newContent, 'utf8') : newContent;
76
+ const fileHash = await hash({ s: textStr });
77
+ const fileExt = existingItem.data?.fileExt || (existingItem.data?.name?.includes('.') ? existingItem.data.name.split('.').pop() || 'txt' : 'txt');
78
+ const binIb = getBinIb({
79
+ binHash: fileHash,
80
+ binExt: fileExt,
81
+ binEncoding: 'utf8',
82
+ });
83
+ const binIbGib = {
84
+ ib: binIb,
85
+ data: dataBuffer,
86
+ };
87
+ binIbGib.gib = await getGib({ ibGib: binIbGib, hasTjp: false });
88
+ const binAddr = getIbGibAddr({ ibGib: binIbGib });
89
+ await putInSpace({ ibGib: binIbGib, space });
90
+ await registerNewIbGib({ ibGib: binIbGib, space });
91
+ const evolveRes = await evolveB2tFSItemIbGib({
92
+ existingItem,
93
+ rel8nsToUpdate: {
94
+ [BINARY_REL8N_NAME]: [binAddr],
95
+ },
96
+ });
97
+ await persistTransformResult({ resTransform: evolveRes, space });
98
+ await registerNewIbGib({ ibGib: evolveRes.newIbGib, space });
99
+ return evolveRes.newIbGib;
100
+ }
101
+ async function createFolderItem({ name, childAddrs, space, }) {
102
+ const res = await createB2tFSItemIbGib({
103
+ fsType: 'folder',
104
+ name,
105
+ rel8ns: {
106
+ [B2TFS_CHILD_ITEM_REL8N_NAME]: childAddrs,
107
+ },
108
+ });
109
+ await persistTransformResult({ resTransform: res, space });
110
+ await registerNewIbGib({ ibGib: res.newIbGib, space });
111
+ return res.newIbGib;
112
+ }
113
+ async function evolveFolderItem({ existingItem, childAddrs, space, }) {
114
+ const res = await evolveB2tFSItemIbGib({
115
+ existingItem,
116
+ rel8nsToUpdate: {
117
+ [B2TFS_CHILD_ITEM_REL8N_NAME]: childAddrs,
118
+ },
119
+ rel8nsToRemove: {
120
+ [B2TFS_CHILD_ITEM_REL8N_NAME]: existingItem.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME] || [],
121
+ },
122
+ });
123
+ await persistTransformResult({ resTransform: res, space });
124
+ await registerNewIbGib({ ibGib: res.newIbGib, space });
125
+ return res.newIbGib;
126
+ }
127
+ await respecfully(lc, `B2tFSItem3WayMergeStrategy In-Memory Respecs`, async () => {
128
+ await ifWe(lc, `performs non-conflicting line merges across two branch timelines`, async () => {
129
+ const space = new InnerSpace_V1({
130
+ ...DEFAULT_INNER_SPACE_DATA_V1,
131
+ name: 'test_space_1',
132
+ uuid: 'test_space_uuid_1',
133
+ });
134
+ await space.initialized;
135
+ const initialText = "line 1\nline 2\nline 3";
136
+ const lcaFile = await createFileWithContent({ name: 'app.ts', content: initialText, space });
137
+ const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
138
+ const lcaFolder = await createFolderItem({ name: 'src', childAddrs: [lcaAddr], space });
139
+ const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
140
+ // Base branch modifies line 1
141
+ const baseText = "line 1 modified by base\nline 2\nline 3";
142
+ const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: baseText, space });
143
+ const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
144
+ const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
145
+ const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
146
+ // Orphan branch modifies line 3
147
+ const orphanText = "line 1\nline 2\nline 3 modified by orphan";
148
+ const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: orphanText, space });
149
+ const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
150
+ const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
151
+ const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
152
+ const timelineA = [lcaFolderAddr, baseFolderAddr];
153
+ const timelineB = [lcaFolderAddr, orphanFolderAddr];
154
+ const graftResult = await graftTimelines({
155
+ timelineAddrsA: timelineA,
156
+ timelineAddrsB: timelineB,
157
+ latestCommonFrameAddr: lcaFolderAddr,
158
+ conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
159
+ ibGibReadCache: {},
160
+ space,
161
+ strategies: [new B2tFSItem3WayMergeStrategy()],
162
+ });
163
+ iReckon(lc, graftResult.newGraftTip).isGonnaBeTruthy();
164
+ const tipGet = await getFromSpace({ space, addrs: [getIbGibAddr({ ibGib: graftResult.newGraftTip })] });
165
+ const mergedFolder = tipGet.ibGibs[0];
166
+ const mergedChildAddr = mergedFolder.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME]?.at(-1);
167
+ iReckon(lc, mergedChildAddr).isGonnaBeTruthy();
168
+ const fileGet = await getFromSpace({ space, addrs: [mergedChildAddr] });
169
+ const mergedFile = fileGet.ibGibs[0];
170
+ const binAddr = mergedFile.rel8ns?.[BINARY_REL8N_NAME]?.at(-1);
171
+ iReckon(lc, binAddr).isGonnaBeTruthy();
172
+ const binGet = await getFromSpace({ space, addrs: [binAddr] });
173
+ const binIbGib = binGet.ibGibs[0];
174
+ const text = binDataToText(binIbGib.data);
175
+ iReckon(lc, text).includes('line 1 modified by base');
176
+ iReckon(lc, text).includes('line 2');
177
+ iReckon(lc, text).includes('line 3 modified by orphan');
178
+ });
179
+ await ifWe(lc, `inserts Git conflict markers on conflicting text line merges`, async () => {
180
+ const space = new InnerSpace_V1({
181
+ ...DEFAULT_INNER_SPACE_DATA_V1,
182
+ name: 'test_space_2',
183
+ uuid: 'test_space_uuid_2',
184
+ });
185
+ await space.initialized;
186
+ const initialText = "line 1\nline 2\nline 3";
187
+ const lcaFile = await createFileWithContent({ name: 'index.ts', content: initialText, space });
188
+ const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
189
+ const lcaFolder = await createFolderItem({ name: 'src', childAddrs: [lcaAddr], space });
190
+ const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
191
+ // Base modifies line 2
192
+ const baseText = "line 1\nline 2 base edit\nline 3";
193
+ const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: baseText, space });
194
+ const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
195
+ const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
196
+ const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
197
+ // Orphan modifies line 2 differently
198
+ const orphanText = "line 1\nline 2 orphan edit\nline 3";
199
+ const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: orphanText, space });
200
+ const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
201
+ const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
202
+ const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
203
+ const timelineA = [lcaFolderAddr, baseFolderAddr];
204
+ const timelineB = [lcaFolderAddr, orphanFolderAddr];
205
+ const graftResult = await graftTimelines({
206
+ timelineAddrsA: timelineA,
207
+ timelineAddrsB: timelineB,
208
+ latestCommonFrameAddr: lcaFolderAddr,
209
+ conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
210
+ ibGibReadCache: {},
211
+ space,
212
+ strategies: [new B2tFSItem3WayMergeStrategy()],
213
+ });
214
+ const tipGet = await getFromSpace({ space, addrs: [getIbGibAddr({ ibGib: graftResult.newGraftTip })] });
215
+ const mergedFolder = tipGet.ibGibs[0];
216
+ const mergedChildAddr = mergedFolder.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME]?.at(-1);
217
+ const fileGet = await getFromSpace({ space, addrs: [mergedChildAddr] });
218
+ const mergedFile = fileGet.ibGibs[0];
219
+ const binAddr = mergedFile.rel8ns?.[BINARY_REL8N_NAME]?.at(-1);
220
+ const binGet = await getFromSpace({ space, addrs: [binAddr] });
221
+ const binIbGib = binGet.ibGibs[0];
222
+ const text = binDataToText(binIbGib.data);
223
+ iReckon(lc, text).includes('<<<<<<< HEAD');
224
+ iReckon(lc, text).includes('line 2 base edit');
225
+ iReckon(lc, text).includes('=======');
226
+ iReckon(lc, text).includes('line 2 orphan edit');
227
+ iReckon(lc, text).includes('>>>>>>>');
228
+ });
229
+ await ifWe(lc, `skips line diff merging for non-text binary files`, async () => {
230
+ const space = new InnerSpace_V1({
231
+ ...DEFAULT_INNER_SPACE_DATA_V1,
232
+ name: 'test_space_3',
233
+ uuid: 'test_space_uuid_3',
234
+ });
235
+ await space.initialized;
236
+ const lcaBinData = new Uint8Array([0x00, 0x01, 0x02, 0x03]);
237
+ const lcaFile = await createFileWithContent({ name: 'image.png', content: lcaBinData, space });
238
+ const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
239
+ const lcaFolder = await createFolderItem({ name: 'assets', childAddrs: [lcaAddr], space });
240
+ const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
241
+ const baseBinData = new Uint8Array([0x00, 0x01, 0x02, 0x04]);
242
+ const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: baseBinData, space });
243
+ const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
244
+ const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
245
+ const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
246
+ const orphanBinData = new Uint8Array([0x00, 0x01, 0x02, 0x05]);
247
+ const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: orphanBinData, space });
248
+ const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
249
+ const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
250
+ const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
251
+ const timelineA = [lcaFolderAddr, baseFolderAddr];
252
+ const timelineB = [lcaFolderAddr, orphanFolderAddr];
253
+ const graftResult = await graftTimelines({
254
+ timelineAddrsA: timelineA,
255
+ timelineAddrsB: timelineB,
256
+ latestCommonFrameAddr: lcaFolderAddr,
257
+ conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
258
+ ibGibReadCache: {},
259
+ space,
260
+ strategies: [new B2tFS3WayGraftStrategy()],
261
+ });
262
+ iReckon(lc, graftResult.newGraftTip).isGonnaBeTruthy();
263
+ });
264
+ await ifWe(lc, `respects GraftPreference.receiver by using timelineB (receiver) as baseTip`, async () => {
265
+ const space = new InnerSpace_V1({
266
+ ...DEFAULT_INNER_SPACE_DATA_V1,
267
+ name: 'test_space_4',
268
+ uuid: 'test_space_uuid_4',
269
+ });
270
+ await space.initialized;
271
+ const initialText = "base content";
272
+ const lcaFile = await createFileWithContent({ name: 'file.txt', content: initialText, space });
273
+ const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
274
+ const lcaFolder = await createFolderItem({ name: 'dir', childAddrs: [lcaAddr], space });
275
+ const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
276
+ const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: "base edit", space });
277
+ const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
278
+ const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
279
+ const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
280
+ const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: "orphan edit", space });
281
+ const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
282
+ const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
283
+ const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
284
+ const timelineA_sender = [lcaFolderAddr, baseFolderAddr];
285
+ const timelineB_receiver = [lcaFolderAddr, orphanFolderAddr];
286
+ const graftResult = await graftTimelines({
287
+ timelineAddrsA: timelineA_sender,
288
+ timelineAddrsB: timelineB_receiver,
289
+ latestCommonFrameAddr: lcaFolderAddr,
290
+ conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
291
+ ibGibReadCache: {},
292
+ space,
293
+ graftPreference: GraftPreference.receiver,
294
+ strategies: [new B2tFS3WayGraftStrategy()],
295
+ });
296
+ iReckon(lc, graftResult.newGraftTip).isGonnaBeTruthy();
297
+ iReckon(lc, graftResult.newGraftTip.rel8ns?.past).includes(orphanFolderAddr);
298
+ });
299
+ await ifWe(lc, `respects GraftPreference.sender by using timelineA (sender) as baseTip`, async () => {
300
+ const space = new InnerSpace_V1({
301
+ ...DEFAULT_INNER_SPACE_DATA_V1,
302
+ name: 'test_space_5',
303
+ uuid: 'test_space_uuid_5',
304
+ });
305
+ await space.initialized;
306
+ const initialText = "base content";
307
+ const lcaFile = await createFileWithContent({ name: 'file.txt', content: initialText, space });
308
+ const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
309
+ const lcaFolder = await createFolderItem({ name: 'dir', childAddrs: [lcaAddr], space });
310
+ const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
311
+ const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: "sender edit", space });
312
+ const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
313
+ const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
314
+ const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
315
+ const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: "receiver edit", space });
316
+ const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
317
+ const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
318
+ const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
319
+ const timelineA_sender = [lcaFolderAddr, baseFolderAddr];
320
+ const timelineB_receiver = [lcaFolderAddr, orphanFolderAddr];
321
+ const graftResult = await graftTimelines({
322
+ timelineAddrsA: timelineA_sender,
323
+ timelineAddrsB: timelineB_receiver,
324
+ latestCommonFrameAddr: lcaFolderAddr,
325
+ conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
326
+ ibGibReadCache: {},
327
+ space,
328
+ graftPreference: GraftPreference.sender,
329
+ strategies: [new B2tFS3WayGraftStrategy()],
330
+ });
331
+ iReckon(lc, graftResult.newGraftTip).isGonnaBeTruthy();
332
+ iReckon(lc, graftResult.newGraftTip.rel8ns?.past).includes(baseFolderAddr);
333
+ });
334
+ });
335
+ //# sourceMappingURL=b2tfs-merge-strategy.respec.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b2tfs-merge-strategy.respec.mjs","sourceRoot":"","sources":["../../../src/engine/merge/b2tfs-merge-strategy.respec.mts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { RespecNodeRunner } from '@ibgib/helper-gib/dist/respec-gib/respec-node-runner.mjs';
7
7
  const runner = new RespecNodeRunner({
8
- respecFileRegExp: /^.+(?:respec|respec\.node)\.mjs$/,
8
+ // respecFileRegExp: /^.+(?:respec|respec\.node)\.mjs$/,
9
9
  });
10
10
  await runner.run();
11
11
  //# sourceMappingURL=respec-gib.node.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"respec-gib.node.mjs","sourceRoot":"","sources":["../src/respec-gib.node.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0DAA0D,CAAC;AAE5F,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC;IAChC,gBAAgB,EAAE,kCAAkC;CACvD,CAAC,CAAC;AACH,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"respec-gib.node.mjs","sourceRoot":"","sources":["../src/respec-gib.node.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0DAA0D,CAAC;AAE5F,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC;AAChC,wDAAwD;CAC3D,CAAC,CAAC;AACH,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC"}
@@ -5,4 +5,4 @@
5
5
  * Tests Metaspace bootstrap, canonical ib atoms, item creation, branch spaces, and index tracking.
6
6
  */
7
7
  export {};
8
- //# sourceMappingURL=vcs-gib.respec.node.d.mts.map
8
+ //# sourceMappingURL=vcs-gib.respec.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcs-gib.respec.d.mts","sourceRoot":"","sources":["../src/vcs-gib.respec.mts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -79,4 +79,4 @@ await respecfully(lc, `vcs-gib Full Engine Cycle`, async () => {
79
79
  });
80
80
  });
81
81
  });
82
- //# sourceMappingURL=vcs-gib.respec.node.mjs.map
82
+ //# sourceMappingURL=vcs-gib.respec.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcs-gib.respec.mjs","sourceRoot":"","sources":["../src/vcs-gib.respec.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,OAAO,EACH,WAAW,EAAE,IAAI,EAAE,OAAO,EAC7B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,qCAAqC,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAGlI,MAAM,EAAE,GAAG,4CAA4C,CAAC;AAExD,MAAM,WAAW,CAAC,EAAE,EAAE,2BAA2B,EAAE,KAAK,IAAI,EAAE;IAE1D,MAAM,WAAW,CAAC,EAAE,EAAE,oBAAoB,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,IAAI,CAAC,EAAE,EAAE,mDAAmD,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;YAC1D,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,CAAC,EAAE,EAAE,2BAA2B,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,IAAI,CAAC,EAAE,EAAE,8CAA8C,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,EAAE,GAAG,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAChE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;YAE7D,MAAM,MAAM,GAAG,4BAA4B,CAAC,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAClD,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,CAAC,EAAE,EAAE,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,IAAI,CAAC,EAAE,EAAE,4DAA4D,EAAE,KAAK,IAAI,EAAE;YACpF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;YAC7D,IAAI,CAAC;gBACD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,qBAAqB,CAAC;oBAC1D,QAAQ,EAAE,OAAO;oBACjB,aAAa,EAAE,oBAAoB;oBACnC,gBAAgB,EAAE,YAAY;iBACjC,CAAC,CAAC;gBAEH,0BAA0B;gBAC1B,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;oBACtC,WAAW,EAAE,IAAI;oBACjB,EAAE,EAAE,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC;oBACjD,IAAI,EAAE;wBACF,IAAI,EAAE,MAAM;wBACZ,QAAQ,EAAE,WAAW;wBACrB,MAAM,EAAE,QAAQ;wBAChB,iBAAiB,EAAE,QAAQ;qBAC9B;iBACJ,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAA6B,CAAC;gBAEvD,sBAAsB;gBACtB,MAAM,UAAU,GAAG,MAAM,CAAC;gBAC1B,MAAM,eAAe,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;gBAC5D,OAAO,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAEnD,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC;oBAC7C,UAAU;oBACV,QAAQ;oBACR,KAAK,EAAE,UAAU;oBACjB,SAAS;iBACZ,CAAC,CAAC;gBACH,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAEtD,qBAAqB;gBACrB,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC;oBAC3C,OAAO,EAAE,kBAAkB;oBAC3B,aAAa,EAAE,kBAAkB;oBACjC,KAAK,EAAE,UAAU;oBACjB,SAAS;iBACZ,CAAC,CAAC;gBACH,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;gBACtE,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACxD,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,cAAc,EAAE,CAAC;YACjE,CAAC;oBAAS,CAAC;gBACP,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibgib/vcs-gib",
3
- "version": "0.0.6",
3
+ "version": "0.0.18",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -22,7 +22,7 @@
22
22
  "@ibgib/helper-gib": "^0.0.36",
23
23
  "@ibgib/ts-gib": "^0.5.33",
24
24
  "@ibgib/encrypt-gib": "^0.2.37",
25
- "@ibgib/core-gib": "^0.1.69",
26
- "@ibgib/node-gib": "^0.0.13"
25
+ "@ibgib/core-gib": "^0.1.71",
26
+ "@ibgib/node-gib": "^0.0.15"
27
27
  }
28
28
  }
@@ -2,4 +2,4 @@
2
2
  * @module AUTO-GENERATED-version
3
3
  * Auto-generated version constant. Do NOT edit directly.
4
4
  */
5
- export const AUTO_GENERATED_VERSION = '0.0.6';
5
+ export const AUTO_GENERATED_VERSION = '0.0.18';
@@ -12,12 +12,14 @@ import { clone, delay } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
12
12
  import { getGib } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
13
13
  import { IbGibSpaceAny } from '@ibgib/core-gib/dist/witness/space/space-base-v1.mjs';
14
14
  import { updateBootstrapIbGib } from '@ibgib/core-gib/dist/witness/space/space-helper.mjs';
15
+ import { registerGraftStrategy } from '@ibgib/core-gib/dist/sync/graft-info/graft-info-helpers.mjs';
15
16
  import { Metaspace_Nodespace } from '@ibgib/node-gib/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.mjs';
16
17
  import { NodeFilesystemSpace_V1 } from '@ibgib/node-gib/dist/witness/space/node-filesystem-space/node-filesystem-space-v1.mjs';
17
18
  import { DEFAULT_NODE_FILESYSTEM_SPACE_DATA_V1 } from '@ibgib/node-gib/dist/witness/space/node-filesystem-space/node-filesystem-space-types.mjs';
18
19
  import { fnCreateNewLocalSpace, fnDtoToSpace_nodeFilesystem } from '@ibgib/node-gib/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace-helper.mjs';
19
20
 
20
21
  import { GLOBAL_LOG_A_LOT } from '../vcs-gib-constants.mjs';
22
+ import { B2tFS3WayGraftStrategy } from '../engine/merge/b2tfs-3way-merge-strategy.mjs';
21
23
 
22
24
  const lcFile = `[node-bootstrap]`;
23
25
  const logalot = GLOBAL_LOG_A_LOT;
@@ -55,6 +57,8 @@ export async function bootstrapVcsMetaspace(
55
57
  const lc = `${lcFile}[${bootstrapVcsMetaspace.name}]`;
56
58
  try {
57
59
  if (logalot) { console.log(`${lc} starting... (I: 9f8a0b1c2d3e4f5a6b7c8d9e0f1a2b3c)`); }
60
+ registerGraftStrategy(new B2tFS3WayGraftStrategy());
61
+
58
62
  const {
59
63
  repoPath = process.cwd(),
60
64
  vcsFolderName = '.vcsgib',
@@ -131,6 +135,7 @@ export async function bootstrapVcsMetaspace(
131
135
  return zeroSpace;
132
136
  },
133
137
  fnDefaultLocalSpaceFactory: async (spaceOpts) => {
138
+ if (spaceOpts) { (spaceOpts as any).baseDir = vcsPath; }
134
139
  const space = await fnCreateNewLocalSpace(spaceOpts);
135
140
  if (space && space.data) {
136
141
  space.data.baseDir = vcsPath;
@@ -139,6 +144,7 @@ export async function bootstrapVcsMetaspace(
139
144
  return space;
140
145
  },
141
146
  fnDtoToSpace: async (spaceDto) => {
147
+ if (spaceDto && spaceDto.data) { spaceDto.data.baseDir = vcsPath; }
142
148
  const space = await fnDtoToSpace_nodeFilesystem(spaceDto);
143
149
  if (space && space.data) {
144
150
  space.data.baseDir = vcsPath;
@@ -15,6 +15,9 @@ import {
15
15
  VCS_PARAM_VERBOSE,
16
16
  VCS_PARAM_HELP,
17
17
  VCS_PARAM_SHARE_IGNORED,
18
+ VCS_PARAM_YES,
19
+ VCS_PARAM_STAGED,
20
+ VCS_PARAM_WORKTREE,
18
21
  } from './cli-constants.mjs';
19
22
 
20
23
  export type VcsSubcommand = typeof VCS_SUBCOMMANDS[keyof typeof VCS_SUBCOMMANDS];
@@ -30,6 +33,9 @@ export interface ParsedVcsArgs {
30
33
  verbose?: boolean;
31
34
  help?: boolean;
32
35
  shareIgnored?: boolean;
36
+ yes?: boolean;
37
+ staged?: boolean;
38
+ worktree?: boolean;
33
39
  };
34
40
  rawArgs: string[];
35
41
  }
@@ -89,6 +95,15 @@ export function parseVcsArgs(argv: string[]): ParsedVcsArgs {
89
95
  } else if (matchesParam(arg, VCS_PARAM_SHARE_IGNORED)) {
90
96
  flags.shareIgnored = true;
91
97
  i++;
98
+ } else if (matchesParam(arg, VCS_PARAM_YES)) {
99
+ flags.yes = true;
100
+ i++;
101
+ } else if (matchesParam(arg, VCS_PARAM_STAGED)) {
102
+ flags.staged = true;
103
+ i++;
104
+ } else if (matchesParam(arg, VCS_PARAM_WORKTREE)) {
105
+ flags.worktree = true;
106
+ i++;
92
107
  } else if (!arg.startsWith('-')) {
93
108
  if (command === VCS_SUBCOMMANDS.HELP) {
94
109
  const normalized = arg.toLowerCase();
@@ -16,6 +16,9 @@ export const VCS_SUBCOMMANDS = {
16
16
  LOG: 'log',
17
17
  BRANCH: 'branch',
18
18
  CHECKOUT: 'checkout',
19
+ MERGE: 'merge',
20
+ RESET: 'reset',
21
+ RESTORE: 'restore',
19
22
  HELP: 'help',
20
23
  VERSION: 'version',
21
24
  } as const;
@@ -75,3 +78,27 @@ export const VCS_PARAM_SHARE_IGNORED: RCLIParamInfo = {
75
78
  isFlag: true,
76
79
  argTypeName: 'boolean',
77
80
  };
81
+
82
+ export const VCS_PARAM_YES: RCLIParamInfo = {
83
+ name: 'yes',
84
+ synonyms: ['y'],
85
+ description: 'Automatically confirm prompt',
86
+ isFlag: true,
87
+ argTypeName: 'boolean',
88
+ };
89
+
90
+ export const VCS_PARAM_STAGED: RCLIParamInfo = {
91
+ name: 'staged',
92
+ synonyms: ['s'],
93
+ description: 'Unstage specified files from index',
94
+ isFlag: true,
95
+ argTypeName: 'boolean',
96
+ };
97
+
98
+ export const VCS_PARAM_WORKTREE: RCLIParamInfo = {
99
+ name: 'worktree',
100
+ synonyms: ['w'],
101
+ description: 'Revert physical working tree files',
102
+ isFlag: true,
103
+ argTypeName: 'boolean',
104
+ };
@@ -9,7 +9,7 @@ import path from 'node:path';
9
9
  import fs from 'node:fs/promises';
10
10
 
11
11
  import {
12
- respecfully, ifWe, iReckon
12
+ respecfully, ifWe, ifWeMight, iReckon
13
13
  } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
14
14
 
15
15
  import { main } from './vcs-cli-main.mjs';
@@ -37,7 +37,7 @@ await respecfully(lc, `Full E2E CLI Integration Spec`, async () => {
37
37
  if (msg.includes('Decentralized Version Control System')) {
38
38
  helpCalled = true;
39
39
  }
40
- if (msg.includes('@ibgib/vcs-gib v0.0.4')) {
40
+ if (msg.includes('@ibgib/vcs-gib v')) {
41
41
  versionCalled = true;
42
42
  }
43
43
  };