@ibgib/vcs-gib 0.0.17 → 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 (143) 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 +3 -0
  5. package/dist/bootstrap/node-bootstrap.mjs.map +1 -1
  6. package/dist/bootstrap/{node-bootstrap.respec.node.d.mts → node-bootstrap.respec.d.mts} +1 -1
  7. package/dist/bootstrap/node-bootstrap.respec.d.mts.map +1 -0
  8. package/dist/bootstrap/{node-bootstrap.respec.node.mjs → node-bootstrap.respec.mjs} +1 -1
  9. package/dist/bootstrap/node-bootstrap.respec.mjs.map +1 -0
  10. package/dist/cli/{cli-arg-parser.respec.node.d.mts → cli-arg-parser.respec.d.mts} +1 -1
  11. package/dist/cli/cli-arg-parser.respec.d.mts.map +1 -0
  12. package/dist/cli/{cli-arg-parser.respec.node.mjs → cli-arg-parser.respec.mjs} +1 -1
  13. package/dist/cli/cli-arg-parser.respec.mjs.map +1 -0
  14. package/dist/cli/cli-constants.d.mts +1 -0
  15. package/dist/cli/cli-constants.d.mts.map +1 -1
  16. package/dist/cli/cli-constants.mjs +1 -0
  17. package/dist/cli/cli-constants.mjs.map +1 -1
  18. package/dist/cli/{cli-e2e.respec.node.d.mts → cli-e2e.respec.d.mts} +1 -1
  19. package/dist/cli/cli-e2e.respec.d.mts.map +1 -0
  20. package/dist/cli/{cli-e2e.respec.node.mjs → cli-e2e.respec.mjs} +1 -1
  21. package/dist/cli/cli-e2e.respec.mjs.map +1 -0
  22. package/dist/cli/commands/add-cmd.d.mts.map +1 -1
  23. package/dist/cli/commands/add-cmd.mjs +2 -2
  24. package/dist/cli/commands/add-cmd.mjs.map +1 -1
  25. package/dist/cli/commands/{branch-checkout-cmd.respec.node.d.mts → branch-checkout-cmd.respec.d.mts} +1 -1
  26. package/dist/cli/commands/branch-checkout-cmd.respec.d.mts.map +1 -0
  27. package/dist/cli/commands/{branch-checkout-cmd.respec.node.mjs → branch-checkout-cmd.respec.mjs} +103 -9
  28. package/dist/cli/commands/branch-checkout-cmd.respec.mjs.map +1 -0
  29. package/dist/cli/commands/branch-cmd.d.mts.map +1 -1
  30. package/dist/cli/commands/branch-cmd.mjs +2 -2
  31. package/dist/cli/commands/branch-cmd.mjs.map +1 -1
  32. package/dist/cli/commands/checkout-cmd.d.mts.map +1 -1
  33. package/dist/cli/commands/checkout-cmd.mjs +15 -7
  34. package/dist/cli/commands/checkout-cmd.mjs.map +1 -1
  35. package/dist/cli/commands/commit-cmd.d.mts.map +1 -1
  36. package/dist/cli/commands/commit-cmd.mjs +2 -2
  37. package/dist/cli/commands/commit-cmd.mjs.map +1 -1
  38. package/dist/cli/commands/{commit-log-cmd.respec.node.d.mts → commit-log-cmd.respec.d.mts} +1 -1
  39. package/dist/cli/commands/commit-log-cmd.respec.d.mts.map +1 -0
  40. package/dist/cli/commands/{commit-log-cmd.respec.node.mjs → commit-log-cmd.respec.mjs} +1 -1
  41. package/dist/cli/commands/commit-log-cmd.respec.mjs.map +1 -0
  42. package/dist/cli/commands/{init-cmd.respec.node.d.mts → init-cmd.respec.d.mts} +1 -1
  43. package/dist/cli/commands/init-cmd.respec.d.mts.map +1 -0
  44. package/dist/cli/commands/{init-cmd.respec.node.mjs → init-cmd.respec.mjs} +1 -1
  45. package/dist/cli/commands/init-cmd.respec.mjs.map +1 -0
  46. package/dist/cli/commands/merge-cmd.d.mts +23 -0
  47. package/dist/cli/commands/merge-cmd.d.mts.map +1 -0
  48. package/dist/cli/commands/merge-cmd.mjs +224 -0
  49. package/dist/cli/commands/merge-cmd.mjs.map +1 -0
  50. package/dist/cli/commands/{reset-restore-cmd.respec.node.d.mts → reset-restore-cmd.respec.d.mts} +1 -1
  51. package/dist/cli/commands/reset-restore-cmd.respec.d.mts.map +1 -0
  52. package/dist/cli/commands/{reset-restore-cmd.respec.node.mjs → reset-restore-cmd.respec.mjs} +1 -1
  53. package/dist/cli/commands/reset-restore-cmd.respec.mjs.map +1 -0
  54. package/dist/cli/commands/{status-add-cmd.respec.node.d.mts → status-add-cmd.respec.d.mts} +1 -1
  55. package/dist/cli/commands/status-add-cmd.respec.d.mts.map +1 -0
  56. package/dist/cli/commands/{status-add-cmd.respec.node.mjs → status-add-cmd.respec.mjs} +1 -1
  57. package/dist/cli/commands/status-add-cmd.respec.mjs.map +1 -0
  58. package/dist/cli/vcs-cli-main.d.mts.map +1 -1
  59. package/dist/cli/vcs-cli-main.mjs +7 -0
  60. package/dist/cli/vcs-cli-main.mjs.map +1 -1
  61. package/dist/engine/branch/{branch-space.respec.node.d.mts → branch-space.respec.d.mts} +1 -1
  62. package/dist/engine/branch/branch-space.respec.d.mts.map +1 -0
  63. package/dist/engine/branch/{branch-space.respec.node.mjs → branch-space.respec.mjs} +1 -1
  64. package/dist/engine/branch/branch-space.respec.mjs.map +1 -0
  65. package/dist/engine/diff/{line-diff-helper.respec.node.d.mts → line-diff-helper.respec.d.mts} +1 -1
  66. package/dist/engine/diff/line-diff-helper.respec.d.mts.map +1 -0
  67. package/dist/engine/diff/{line-diff-helper.respec.node.mjs → line-diff-helper.respec.mjs} +1 -1
  68. package/dist/engine/diff/line-diff-helper.respec.mjs.map +1 -0
  69. package/dist/engine/filter/{glob-helper.respec.node.d.mts → glob-helper.respec.d.mts} +1 -1
  70. package/dist/engine/filter/glob-helper.respec.d.mts.map +1 -0
  71. package/dist/engine/filter/{glob-helper.respec.node.mjs → glob-helper.respec.mjs} +1 -1
  72. package/dist/engine/filter/glob-helper.respec.mjs.map +1 -0
  73. package/dist/engine/item/{item.respec.node.d.mts → item.respec.d.mts} +1 -1
  74. package/dist/engine/item/item.respec.d.mts.map +1 -0
  75. package/dist/engine/item/{item.respec.node.mjs → item.respec.mjs} +1 -1
  76. package/dist/engine/item/item.respec.mjs.map +1 -0
  77. package/dist/engine/merge/b2tfs-3way-merge-strategy.d.mts +38 -0
  78. package/dist/engine/merge/b2tfs-3way-merge-strategy.d.mts.map +1 -0
  79. package/dist/engine/merge/b2tfs-3way-merge-strategy.mjs +593 -0
  80. package/dist/engine/merge/b2tfs-3way-merge-strategy.mjs.map +1 -0
  81. package/dist/engine/merge/b2tfs-merge-strategy.respec.d.mts +7 -0
  82. package/dist/engine/merge/b2tfs-merge-strategy.respec.d.mts.map +1 -0
  83. package/dist/engine/merge/b2tfs-merge-strategy.respec.mjs +335 -0
  84. package/dist/engine/merge/b2tfs-merge-strategy.respec.mjs.map +1 -0
  85. package/dist/respec-gib.node.mjs +1 -1
  86. package/dist/respec-gib.node.mjs.map +1 -1
  87. package/dist/{vcs-gib.respec.node.d.mts → vcs-gib.respec.d.mts} +1 -1
  88. package/dist/vcs-gib.respec.d.mts.map +1 -0
  89. package/dist/{vcs-gib.respec.node.mjs → vcs-gib.respec.mjs} +1 -1
  90. package/dist/vcs-gib.respec.mjs.map +1 -0
  91. package/package.json +3 -3
  92. package/src/AUTO-GENERATED-version.mts +1 -1
  93. package/src/bootstrap/node-bootstrap.mts +4 -0
  94. package/src/cli/cli-constants.mts +1 -0
  95. package/src/cli/commands/add-cmd.mts +5 -3
  96. package/src/cli/commands/{branch-checkout-cmd.respec.node.mts → branch-checkout-cmd.respec.mts} +112 -9
  97. package/src/cli/commands/branch-cmd.mts +3 -2
  98. package/src/cli/commands/checkout-cmd.mts +23 -9
  99. package/src/cli/commands/commit-cmd.mts +5 -3
  100. package/src/cli/commands/merge-cmd.mts +289 -0
  101. package/src/cli/vcs-cli-main.mts +7 -0
  102. package/src/engine/merge/b2tfs-3way-merge-strategy.mts +725 -0
  103. package/src/engine/merge/b2tfs-merge-strategy.respec.mts +438 -0
  104. package/src/respec-gib.node.mts +2 -2
  105. package/tsconfig.tsbuildinfo +1 -1
  106. package/dist/bootstrap/node-bootstrap.respec.node.d.mts.map +0 -1
  107. package/dist/bootstrap/node-bootstrap.respec.node.mjs.map +0 -1
  108. package/dist/cli/cli-arg-parser.respec.node.d.mts.map +0 -1
  109. package/dist/cli/cli-arg-parser.respec.node.mjs.map +0 -1
  110. package/dist/cli/cli-e2e.respec.node.d.mts.map +0 -1
  111. package/dist/cli/cli-e2e.respec.node.mjs.map +0 -1
  112. package/dist/cli/commands/branch-checkout-cmd.respec.node.d.mts.map +0 -1
  113. package/dist/cli/commands/branch-checkout-cmd.respec.node.mjs.map +0 -1
  114. package/dist/cli/commands/commit-log-cmd.respec.node.d.mts.map +0 -1
  115. package/dist/cli/commands/commit-log-cmd.respec.node.mjs.map +0 -1
  116. package/dist/cli/commands/init-cmd.respec.node.d.mts.map +0 -1
  117. package/dist/cli/commands/init-cmd.respec.node.mjs.map +0 -1
  118. package/dist/cli/commands/reset-restore-cmd.respec.node.d.mts.map +0 -1
  119. package/dist/cli/commands/reset-restore-cmd.respec.node.mjs.map +0 -1
  120. package/dist/cli/commands/status-add-cmd.respec.node.d.mts.map +0 -1
  121. package/dist/cli/commands/status-add-cmd.respec.node.mjs.map +0 -1
  122. package/dist/engine/branch/branch-space.respec.node.d.mts.map +0 -1
  123. package/dist/engine/branch/branch-space.respec.node.mjs.map +0 -1
  124. package/dist/engine/diff/line-diff-helper.respec.node.d.mts.map +0 -1
  125. package/dist/engine/diff/line-diff-helper.respec.node.mjs.map +0 -1
  126. package/dist/engine/filter/glob-helper.respec.node.d.mts.map +0 -1
  127. package/dist/engine/filter/glob-helper.respec.node.mjs.map +0 -1
  128. package/dist/engine/item/item.respec.node.d.mts.map +0 -1
  129. package/dist/engine/item/item.respec.node.mjs.map +0 -1
  130. package/dist/vcs-gib.respec.node.d.mts.map +0 -1
  131. package/dist/vcs-gib.respec.node.mjs.map +0 -1
  132. /package/src/bootstrap/{node-bootstrap.respec.node.mts → node-bootstrap.respec.mts} +0 -0
  133. /package/src/cli/{cli-arg-parser.respec.node.mts → cli-arg-parser.respec.mts} +0 -0
  134. /package/src/cli/{cli-e2e.respec.node.mts → cli-e2e.respec.mts} +0 -0
  135. /package/src/cli/commands/{commit-log-cmd.respec.node.mts → commit-log-cmd.respec.mts} +0 -0
  136. /package/src/cli/commands/{init-cmd.respec.node.mts → init-cmd.respec.mts} +0 -0
  137. /package/src/cli/commands/{reset-restore-cmd.respec.node.mts → reset-restore-cmd.respec.mts} +0 -0
  138. /package/src/cli/commands/{status-add-cmd.respec.node.mts → status-add-cmd.respec.mts} +0 -0
  139. /package/src/engine/branch/{branch-space.respec.node.mts → branch-space.respec.mts} +0 -0
  140. /package/src/engine/diff/{line-diff-helper.respec.node.mts → line-diff-helper.respec.mts} +0 -0
  141. /package/src/engine/filter/{glob-helper.respec.node.mts → glob-helper.respec.mts} +0 -0
  142. /package/src/engine/item/{item.respec.node.mts → item.respec.mts} +0 -0
  143. /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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibgib/vcs-gib",
3
- "version": "0.0.17",
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.70",
26
- "@ibgib/node-gib": "^0.0.14"
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.17';
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',
@@ -16,6 +16,7 @@ export const VCS_SUBCOMMANDS = {
16
16
  LOG: 'log',
17
17
  BRANCH: 'branch',
18
18
  CHECKOUT: 'checkout',
19
+ MERGE: 'merge',
19
20
  RESET: 'reset',
20
21
  RESTORE: 'restore',
21
22
  HELP: 'help',
@@ -118,11 +118,13 @@ export async function executeAddCmd({
118
118
  }
119
119
  }
120
120
 
121
- const activeBranchIbGib = branchIbGibs.find(
121
+ const activeBranchIbGib = branchIbGibs.findLast(
122
122
  (b) => (b as B2tFSBranchIbGib_V1)?.data?.name === activeBranch,
123
- ) as B2tFSBranchIbGib_V1 || (branchIbGibs.at(0) as B2tFSBranchIbGib_V1);
123
+ ) as B2tFSBranchIbGib_V1 || (branchIbGibs.at(-1) as B2tFSBranchIbGib_V1);
124
+
125
+
126
+ const rootItemAddr = activeBranchIbGib?.rel8ns?.b2tfs_item?.at(-1);
124
127
 
125
- const rootItemAddr = activeBranchIbGib?.rel8ns?.b2tfs_item?.at(0);
126
128
  if (rootItemAddr) {
127
129
  const rootItem = await getIbGibWithMetaspaceFallback({
128
130
  addr: rootItemAddr,