@ibgib/vcs-gib 0.0.21 → 0.0.26
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.
- package/CHANGELOG.md +19 -0
- package/VCS_CLI_USER_GUIDE.md +94 -89
- package/dist/AUTO-GENERATED-version.d.mts +1 -1
- package/dist/AUTO-GENERATED-version.mjs +1 -1
- package/dist/bootstrap/node-bootstrap.mjs +1 -1
- package/dist/cli/cli-arg-parser.d.mts +1 -0
- package/dist/cli/cli-arg-parser.d.mts.map +1 -1
- package/dist/cli/cli-arg-parser.mjs +5 -1
- package/dist/cli/cli-arg-parser.mjs.map +1 -1
- package/dist/cli/cli-constants.d.mts +6 -0
- package/dist/cli/cli-constants.d.mts.map +1 -1
- package/dist/cli/cli-constants.mjs +12 -0
- package/dist/cli/cli-constants.mjs.map +1 -1
- package/dist/cli/commands/add-cmd.d.mts.map +1 -1
- package/dist/cli/commands/add-cmd.mjs +5 -2
- package/dist/cli/commands/add-cmd.mjs.map +1 -1
- package/dist/cli/commands/commit-cmd.d.mts +5 -4
- package/dist/cli/commands/commit-cmd.d.mts.map +1 -1
- package/dist/cli/commands/commit-cmd.mjs +149 -33
- package/dist/cli/commands/commit-cmd.mjs.map +1 -1
- package/dist/cli/commands/generate-comment-cmd.d.mts +19 -0
- package/dist/cli/commands/generate-comment-cmd.d.mts.map +1 -0
- package/dist/cli/commands/generate-comment-cmd.mjs +140 -0
- package/dist/cli/commands/generate-comment-cmd.mjs.map +1 -0
- package/dist/cli/commands/log-cmd.d.mts +12 -3
- package/dist/cli/commands/log-cmd.d.mts.map +1 -1
- package/dist/cli/commands/log-cmd.mjs +236 -38
- package/dist/cli/commands/log-cmd.mjs.map +1 -1
- package/dist/cli/commands/merge-cmd.d.mts +21 -8
- package/dist/cli/commands/merge-cmd.d.mts.map +1 -1
- package/dist/cli/commands/merge-cmd.mjs +138 -70
- package/dist/cli/commands/merge-cmd.mjs.map +1 -1
- package/dist/cli/commands/status-cmd.d.mts +5 -6
- package/dist/cli/commands/status-cmd.d.mts.map +1 -1
- package/dist/cli/commands/status-cmd.mjs +50 -205
- package/dist/cli/commands/status-cmd.mjs.map +1 -1
- package/dist/cli/vcs-cli-main.d.mts.map +1 -1
- package/dist/cli/vcs-cli-main.mjs +27 -6
- package/dist/cli/vcs-cli-main.mjs.map +1 -1
- package/dist/engine/index/index-helper.d.mts.map +1 -1
- package/dist/engine/index/index-helper.mjs +3 -0
- package/dist/engine/index/index-helper.mjs.map +1 -1
- package/dist/engine/item/item-helper.d.mts +31 -1
- package/dist/engine/item/item-helper.d.mts.map +1 -1
- package/dist/engine/item/item-helper.mjs +44 -2
- package/dist/engine/item/item-helper.mjs.map +1 -1
- package/dist/engine/merge/b2tfs-3way-graft-strategy.d.mts +74 -0
- package/dist/engine/merge/b2tfs-3way-graft-strategy.d.mts.map +1 -0
- package/dist/engine/merge/{b2tfs-3way-merge-strategy.mjs → b2tfs-3way-graft-strategy.mjs} +133 -304
- package/dist/engine/merge/b2tfs-3way-graft-strategy.mjs.map +1 -0
- package/dist/engine/merge/{b2tfs-3way-merge-types.d.mts → b2tfs-3way-graft-types.d.mts} +2 -9
- package/dist/engine/merge/b2tfs-3way-graft-types.d.mts.map +1 -0
- package/dist/engine/merge/b2tfs-3way-graft-types.mjs +2 -0
- package/dist/engine/merge/b2tfs-3way-graft-types.mjs.map +1 -0
- package/dist/engine/status/status-helper.d.mts +89 -0
- package/dist/engine/status/status-helper.d.mts.map +1 -0
- package/dist/engine/status/status-helper.mjs +285 -0
- package/dist/engine/status/status-helper.mjs.map +1 -0
- package/dist/test/test-helpers.d.mts +51 -0
- package/dist/test/test-helpers.d.mts.map +1 -0
- package/dist/test/test-helpers.mjs +135 -0
- package/dist/test/test-helpers.mjs.map +1 -0
- package/package.json +4 -4
- package/src/AUTO-GENERATED-version.mts +1 -1
- package/src/bootstrap/node-bootstrap.mts +1 -1
- package/src/cli/cli-arg-parser.mts +5 -0
- package/src/cli/cli-constants.mts +13 -0
- package/src/cli/commands/add-cmd.mts +5 -2
- package/src/cli/commands/branch-checkout-cmd.respec.log +8 -101
- package/src/cli/commands/branch-checkout-cmd.respec.mts +11 -10
- package/src/cli/commands/commit-cmd.mts +165 -42
- package/src/cli/commands/commit-log-cmd.respec.mts +216 -3
- package/src/cli/commands/generate-comment-cmd.mts +171 -0
- package/src/cli/commands/log-cmd.mts +288 -41
- package/src/cli/commands/merge-cmd.mts +154 -76
- package/src/cli/commands/status-cmd.mts +57 -256
- package/src/cli/vcs-cli-main.mts +28 -7
- package/src/engine/index/index-helper.mts +3 -0
- package/src/engine/item/item-helper.mts +76 -3
- package/src/engine/merge/{b2tfs-3way-merge-strategy.mts → b2tfs-3way-graft-strategy.mts} +152 -374
- package/src/engine/merge/{b2tfs-3way-merge-strategy.respec.mts → b2tfs-3way-graft-strategy.respec.mts} +27 -122
- package/src/engine/merge/{b2tfs-3way-merge-types.mts → b2tfs-3way-graft-types.mts} +34 -42
- package/src/engine/merge/b2tfs-sync-comments.respec.mts +399 -0
- package/src/engine/status/status-helper.mts +380 -0
- package/src/test/test-helpers.mts +168 -0
- package/tsconfig.test.tsbuildinfo +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/engine/merge/b2tfs-3way-merge-strategy.d.mts +0 -48
- package/dist/engine/merge/b2tfs-3way-merge-strategy.d.mts.map +0 -1
- package/dist/engine/merge/b2tfs-3way-merge-strategy.mjs.map +0 -1
- package/dist/engine/merge/b2tfs-3way-merge-types.d.mts.map +0 -1
- package/dist/engine/merge/b2tfs-3way-merge-types.mjs +0 -2
- package/dist/engine/merge/b2tfs-3way-merge-types.mjs.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module b2tfs-
|
|
2
|
+
* @module b2tfs-3way-graft-strategy.respec.node
|
|
3
3
|
*
|
|
4
|
-
* In-memory respec unit tests for
|
|
4
|
+
* In-memory respec unit tests for B2tFS3WayGraftStrategy.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
|
-
respecfully, ifWe,
|
|
8
|
+
respecfully, ifWe, iReckon,
|
|
9
9
|
firstOfEach
|
|
10
10
|
} from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
|
|
11
11
|
|
|
@@ -22,10 +22,10 @@ import { BinIbGib_V1 } from '@ibgib/core-gib/dist/common/bin/bin-types.mjs';
|
|
|
22
22
|
import { GraftStrategyService } from '@ibgib/core-gib/dist/sync/graft-info/graft-strategy-service.mjs';
|
|
23
23
|
|
|
24
24
|
import { createB2tFSItemIbGib, evolveB2tFSItemIbGib } from '../item/item-helper.mjs';
|
|
25
|
-
import { B2tFSItemIbGib_V1, BINARY_REL8N_NAME
|
|
26
|
-
import { B2tFS3WayGraftStrategy
|
|
25
|
+
import { B2tFSItemIbGib_V1, BINARY_REL8N_NAME } from '../item/item-types.mjs';
|
|
26
|
+
import { B2tFS3WayGraftStrategy } from './b2tfs-3way-graft-strategy.mjs';
|
|
27
27
|
|
|
28
|
-
const lc = `[apps/vcs-gib/src/engine/merge/b2tfs-
|
|
28
|
+
const lc = `[apps/vcs-gib/src/engine/merge/b2tfs-3way-graft-strategy.respec.node.mts]`;
|
|
29
29
|
|
|
30
30
|
const graftStrategySvc = GraftStrategyService.instance;
|
|
31
31
|
|
|
@@ -132,59 +132,11 @@ async function evolveFileContent({
|
|
|
132
132
|
return evolveRes.newIbGib as B2tFSItemIbGib_V1;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
async
|
|
136
|
-
name,
|
|
137
|
-
childAddrs,
|
|
138
|
-
space,
|
|
139
|
-
}: {
|
|
140
|
-
name: string;
|
|
141
|
-
childAddrs: string[];
|
|
142
|
-
space: any;
|
|
143
|
-
}): Promise<B2tFSItemIbGib_V1> {
|
|
144
|
-
const res = await createB2tFSItemIbGib({
|
|
145
|
-
fsType: 'folder',
|
|
146
|
-
name,
|
|
147
|
-
rel8ns: {
|
|
148
|
-
[B2TFS_CHILD_ITEM_REL8N_NAME]: childAddrs,
|
|
149
|
-
},
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
await persistTransformResult({ resTransform: res, space });
|
|
153
|
-
await registerNewIbGib({ ibGib: res.newIbGib, space });
|
|
154
|
-
|
|
155
|
-
return res.newIbGib as B2tFSItemIbGib_V1;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
async function evolveFolderItem({
|
|
159
|
-
existingItem,
|
|
160
|
-
childAddrs,
|
|
161
|
-
space,
|
|
162
|
-
}: {
|
|
163
|
-
existingItem: B2tFSItemIbGib_V1;
|
|
164
|
-
childAddrs: string[];
|
|
165
|
-
space: any;
|
|
166
|
-
}): Promise<B2tFSItemIbGib_V1> {
|
|
167
|
-
const res = await evolveB2tFSItemIbGib({
|
|
168
|
-
existingItem,
|
|
169
|
-
rel8nsToUpdate: {
|
|
170
|
-
[B2TFS_CHILD_ITEM_REL8N_NAME]: childAddrs,
|
|
171
|
-
},
|
|
172
|
-
rel8nsToRemove: {
|
|
173
|
-
[B2TFS_CHILD_ITEM_REL8N_NAME]: existingItem.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME] || [],
|
|
174
|
-
},
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
await persistTransformResult({ resTransform: res, space });
|
|
178
|
-
await registerNewIbGib({ ibGib: res.newIbGib, space });
|
|
179
|
-
|
|
180
|
-
return res.newIbGib as B2tFSItemIbGib_V1;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
await respecfully(lc, `B2tFSItem3WayMergeStrategy In-Memory Respecs`, async () => {
|
|
135
|
+
await respecfully(lc, `B2tFS3WayGraftStrategy In-Memory Respecs`, async () => {
|
|
184
136
|
|
|
185
137
|
firstOfEach(lc, async () => {
|
|
186
138
|
graftStrategySvc.reset();
|
|
187
|
-
graftStrategySvc.registerStrategy(new
|
|
139
|
+
graftStrategySvc.registerStrategy(new B2tFS3WayGraftStrategy());
|
|
188
140
|
});
|
|
189
141
|
|
|
190
142
|
await ifWe(lc, `performs non-conflicting line merges across two branch timelines`, async () => {
|
|
@@ -199,30 +151,23 @@ await respecfully(lc, `B2tFSItem3WayMergeStrategy In-Memory Respecs`, async () =
|
|
|
199
151
|
const lcaFile = await createFileWithContent({ name: 'app.ts', content: initialText, space });
|
|
200
152
|
const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
|
|
201
153
|
|
|
202
|
-
const lcaFolder = await createFolderItem({ name: 'src', childAddrs: [lcaAddr], space });
|
|
203
|
-
const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
|
|
204
|
-
|
|
205
154
|
// Base branch modifies line 1
|
|
206
155
|
const baseText = "line 1 modified by base\nline 2\nline 3";
|
|
207
156
|
const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: baseText, space });
|
|
208
157
|
const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
|
|
209
|
-
const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
|
|
210
|
-
const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
|
|
211
158
|
|
|
212
159
|
// Orphan branch modifies line 3
|
|
213
160
|
const orphanText = "line 1\nline 2\nline 3 modified by orphan";
|
|
214
161
|
const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: orphanText, space });
|
|
215
162
|
const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
|
|
216
|
-
const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
|
|
217
|
-
const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
|
|
218
163
|
|
|
219
|
-
const timelineA = [
|
|
220
|
-
const timelineB = [
|
|
164
|
+
const timelineA = [lcaAddr, baseFileAddr];
|
|
165
|
+
const timelineB = [lcaAddr, orphanFileAddr];
|
|
221
166
|
|
|
222
167
|
const graftResult = await graftStrategySvc.graftTimelines({
|
|
223
168
|
timelineAddrsA: timelineA,
|
|
224
169
|
timelineAddrsB: timelineB,
|
|
225
|
-
latestCommonFrameAddr:
|
|
170
|
+
latestCommonFrameAddr: lcaAddr,
|
|
226
171
|
conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
|
|
227
172
|
ibGibReadCache: {},
|
|
228
173
|
space,
|
|
@@ -231,13 +176,7 @@ await respecfully(lc, `B2tFSItem3WayMergeStrategy In-Memory Respecs`, async () =
|
|
|
231
176
|
iReckon(lc, graftResult.newGraftTip).isGonnaBeTruthy();
|
|
232
177
|
|
|
233
178
|
const tipGet = await getFromSpace({ space, addrs: [getIbGibAddr({ ibGib: graftResult.newGraftTip })] });
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
const mergedChildAddr = mergedFolder.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME]?.at(-1);
|
|
237
|
-
iReckon(lc, mergedChildAddr).isGonnaBeTruthy();
|
|
238
|
-
|
|
239
|
-
const fileGet = await getFromSpace({ space, addrs: [mergedChildAddr!] });
|
|
240
|
-
const mergedFile = fileGet.ibGibs![0] as B2tFSItemIbGib_V1;
|
|
179
|
+
const mergedFile = tipGet.ibGibs![0] as B2tFSItemIbGib_V1;
|
|
241
180
|
|
|
242
181
|
const binAddr = mergedFile.rel8ns?.[BINARY_REL8N_NAME]?.at(-1);
|
|
243
182
|
iReckon(lc, binAddr).isGonnaBeTruthy();
|
|
@@ -263,41 +202,30 @@ await respecfully(lc, `B2tFSItem3WayMergeStrategy In-Memory Respecs`, async () =
|
|
|
263
202
|
const lcaFile = await createFileWithContent({ name: 'index.ts', content: initialText, space });
|
|
264
203
|
const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
|
|
265
204
|
|
|
266
|
-
const lcaFolder = await createFolderItem({ name: 'src', childAddrs: [lcaAddr], space });
|
|
267
|
-
const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
|
|
268
|
-
|
|
269
205
|
// Base modifies line 2
|
|
270
206
|
const baseText = "line 1\nline 2 base edit\nline 3";
|
|
271
207
|
const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: baseText, space });
|
|
272
208
|
const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
|
|
273
|
-
const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
|
|
274
|
-
const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
|
|
275
209
|
|
|
276
210
|
// Orphan modifies line 2 differently
|
|
277
211
|
const orphanText = "line 1\nline 2 orphan edit\nline 3";
|
|
278
212
|
const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: orphanText, space });
|
|
279
213
|
const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
|
|
280
|
-
const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
|
|
281
|
-
const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
|
|
282
214
|
|
|
283
|
-
const timelineA = [
|
|
284
|
-
const timelineB = [
|
|
215
|
+
const timelineA = [lcaAddr, baseFileAddr];
|
|
216
|
+
const timelineB = [lcaAddr, orphanFileAddr];
|
|
285
217
|
|
|
286
218
|
const graftResult = await graftStrategySvc.graftTimelines({
|
|
287
219
|
timelineAddrsA: timelineA,
|
|
288
220
|
timelineAddrsB: timelineB,
|
|
289
|
-
latestCommonFrameAddr:
|
|
221
|
+
latestCommonFrameAddr: lcaAddr,
|
|
290
222
|
conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
|
|
291
223
|
ibGibReadCache: {},
|
|
292
224
|
space,
|
|
293
225
|
});
|
|
294
226
|
|
|
295
227
|
const tipGet = await getFromSpace({ space, addrs: [getIbGibAddr({ ibGib: graftResult.newGraftTip })] });
|
|
296
|
-
const
|
|
297
|
-
|
|
298
|
-
const mergedChildAddr = mergedFolder.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME]?.at(-1);
|
|
299
|
-
const fileGet = await getFromSpace({ space, addrs: [mergedChildAddr!] });
|
|
300
|
-
const mergedFile = fileGet.ibGibs![0] as B2tFSItemIbGib_V1;
|
|
228
|
+
const mergedFile = tipGet.ibGibs![0] as B2tFSItemIbGib_V1;
|
|
301
229
|
|
|
302
230
|
const binAddr = mergedFile.rel8ns?.[BINARY_REL8N_NAME]?.at(-1);
|
|
303
231
|
const binGet = await getFromSpace({ space, addrs: [binAddr!] });
|
|
@@ -323,28 +251,21 @@ await respecfully(lc, `B2tFSItem3WayMergeStrategy In-Memory Respecs`, async () =
|
|
|
323
251
|
const lcaFile = await createFileWithContent({ name: 'image.png', content: lcaBinData, space });
|
|
324
252
|
const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
|
|
325
253
|
|
|
326
|
-
const lcaFolder = await createFolderItem({ name: 'assets', childAddrs: [lcaAddr], space });
|
|
327
|
-
const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
|
|
328
|
-
|
|
329
254
|
const baseBinData = new Uint8Array([0x00, 0x01, 0x02, 0x04]);
|
|
330
255
|
const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: baseBinData, space });
|
|
331
256
|
const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
|
|
332
|
-
const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
|
|
333
|
-
const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
|
|
334
257
|
|
|
335
258
|
const orphanBinData = new Uint8Array([0x00, 0x01, 0x02, 0x05]);
|
|
336
259
|
const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: orphanBinData, space });
|
|
337
260
|
const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
|
|
338
|
-
const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
|
|
339
|
-
const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
|
|
340
261
|
|
|
341
|
-
const timelineA = [
|
|
342
|
-
const timelineB = [
|
|
262
|
+
const timelineA = [lcaAddr, baseFileAddr];
|
|
263
|
+
const timelineB = [lcaAddr, orphanFileAddr];
|
|
343
264
|
|
|
344
265
|
const graftResult = await graftStrategySvc.graftTimelines({
|
|
345
266
|
timelineAddrsA: timelineA,
|
|
346
267
|
timelineAddrsB: timelineB,
|
|
347
|
-
latestCommonFrameAddr:
|
|
268
|
+
latestCommonFrameAddr: lcaAddr,
|
|
348
269
|
conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
|
|
349
270
|
ibGibReadCache: {},
|
|
350
271
|
space,
|
|
@@ -364,26 +285,20 @@ await respecfully(lc, `B2tFSItem3WayMergeStrategy In-Memory Respecs`, async () =
|
|
|
364
285
|
const initialText = "base content";
|
|
365
286
|
const lcaFile = await createFileWithContent({ name: 'file.txt', content: initialText, space });
|
|
366
287
|
const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
|
|
367
|
-
const lcaFolder = await createFolderItem({ name: 'dir', childAddrs: [lcaAddr], space });
|
|
368
|
-
const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
|
|
369
288
|
|
|
370
289
|
const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: "base edit", space });
|
|
371
290
|
const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
|
|
372
|
-
const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
|
|
373
|
-
const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
|
|
374
291
|
|
|
375
292
|
const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: "orphan edit", space });
|
|
376
293
|
const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
|
|
377
|
-
const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
|
|
378
|
-
const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
|
|
379
294
|
|
|
380
|
-
const timelineA_sender = [
|
|
381
|
-
const timelineB_receiver = [
|
|
295
|
+
const timelineA_sender = [lcaAddr, baseFileAddr];
|
|
296
|
+
const timelineB_receiver = [lcaAddr, orphanFileAddr];
|
|
382
297
|
|
|
383
298
|
const graftResult = await graftStrategySvc.graftTimelines({
|
|
384
299
|
timelineAddrsA: timelineA_sender,
|
|
385
300
|
timelineAddrsB: timelineB_receiver,
|
|
386
|
-
latestCommonFrameAddr:
|
|
301
|
+
latestCommonFrameAddr: lcaAddr,
|
|
387
302
|
conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
|
|
388
303
|
ibGibReadCache: {},
|
|
389
304
|
space,
|
|
@@ -391,7 +306,7 @@ await respecfully(lc, `B2tFSItem3WayMergeStrategy In-Memory Respecs`, async () =
|
|
|
391
306
|
});
|
|
392
307
|
|
|
393
308
|
iReckon(lc, graftResult.newGraftTip).isGonnaBeTruthy();
|
|
394
|
-
iReckon(lc, graftResult.newGraftTip.rel8ns?.past).includes(
|
|
309
|
+
iReckon(lc, graftResult.newGraftTip.rel8ns?.past).includes(orphanFileAddr);
|
|
395
310
|
});
|
|
396
311
|
|
|
397
312
|
await ifWe(lc, `respects GraftPreference.sender by using timelineA (sender) as baseTip`, async () => {
|
|
@@ -405,26 +320,20 @@ await respecfully(lc, `B2tFSItem3WayMergeStrategy In-Memory Respecs`, async () =
|
|
|
405
320
|
const initialText = "base content";
|
|
406
321
|
const lcaFile = await createFileWithContent({ name: 'file.txt', content: initialText, space });
|
|
407
322
|
const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
|
|
408
|
-
const lcaFolder = await createFolderItem({ name: 'dir', childAddrs: [lcaAddr], space });
|
|
409
|
-
const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
|
|
410
323
|
|
|
411
324
|
const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: "sender edit", space });
|
|
412
325
|
const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
|
|
413
|
-
const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
|
|
414
|
-
const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
|
|
415
326
|
|
|
416
327
|
const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: "receiver edit", space });
|
|
417
328
|
const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
|
|
418
|
-
const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
|
|
419
|
-
const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
|
|
420
329
|
|
|
421
|
-
const timelineA_sender = [
|
|
422
|
-
const timelineB_receiver = [
|
|
330
|
+
const timelineA_sender = [lcaAddr, baseFileAddr];
|
|
331
|
+
const timelineB_receiver = [lcaAddr, orphanFileAddr];
|
|
423
332
|
|
|
424
333
|
const graftResult = await graftStrategySvc.graftTimelines({
|
|
425
334
|
timelineAddrsA: timelineA_sender,
|
|
426
335
|
timelineAddrsB: timelineB_receiver,
|
|
427
|
-
latestCommonFrameAddr:
|
|
336
|
+
latestCommonFrameAddr: lcaAddr,
|
|
428
337
|
conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
|
|
429
338
|
ibGibReadCache: {},
|
|
430
339
|
space,
|
|
@@ -432,10 +341,6 @@ await respecfully(lc, `B2tFSItem3WayMergeStrategy In-Memory Respecs`, async () =
|
|
|
432
341
|
});
|
|
433
342
|
|
|
434
343
|
iReckon(lc, graftResult.newGraftTip).isGonnaBeTruthy();
|
|
435
|
-
iReckon(lc, graftResult.newGraftTip.rel8ns?.past).includes(
|
|
344
|
+
iReckon(lc, graftResult.newGraftTip.rel8ns?.past).includes(baseFileAddr);
|
|
436
345
|
});
|
|
437
346
|
});
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
@@ -1,42 +1,34 @@
|
|
|
1
|
-
import { IbGibAddr } from "@ibgib/ts-gib/dist/types.mjs";
|
|
2
|
-
import { AddlGraftDetails } from "@ibgib/core-gib/dist/sync/graft-info/graft-info-types.mjs";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Contains references to key b2tfs item ibgibs and their corresponding binary ibgibs
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* So if merging `my-feature-branch` into `main`...
|
|
17
|
-
*
|
|
18
|
-
* this is the
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* So if merging `my-feature-branch` into `main`...
|
|
30
|
-
*
|
|
31
|
-
* this is the
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* So if merging `my-feature-branch` into `main`...
|
|
37
|
-
*
|
|
38
|
-
* this is the binary ibgib whose text is in `my-feature-branch`
|
|
39
|
-
*/
|
|
40
|
-
orphanTextBinAddr: IbGibAddr | undefined;
|
|
41
|
-
|
|
42
|
-
}
|
|
1
|
+
import { IbGibAddr } from "@ibgib/ts-gib/dist/types.mjs";
|
|
2
|
+
import { AddlGraftDetails } from "@ibgib/core-gib/dist/sync/graft-info/graft-info-types.mjs";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Contains references to key b2tfs item ibgibs and their corresponding binary ibgibs.
|
|
6
|
+
*/
|
|
7
|
+
export interface B2tFS3WayAddlGraftDetails extends AddlGraftDetails {
|
|
8
|
+
/**
|
|
9
|
+
* So if merging `my-feature-branch` into `main`...
|
|
10
|
+
*
|
|
11
|
+
* this is the b2tfs item that points to the binary ibgib with text of the
|
|
12
|
+
* file in `main`
|
|
13
|
+
*/
|
|
14
|
+
baseTextB2tFSItemAddr: IbGibAddr;
|
|
15
|
+
/**
|
|
16
|
+
* So if merging `my-feature-branch` into `main`...
|
|
17
|
+
*
|
|
18
|
+
* this is the binary ibgib whose text is in `main`
|
|
19
|
+
*/
|
|
20
|
+
baseTextBinAddr: IbGibAddr | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* So if merging `my-feature-branch` into `main`...
|
|
23
|
+
*
|
|
24
|
+
* this is the b2tfs item that points to the binary ibgib with text of the
|
|
25
|
+
* file in `my-feature-branch`
|
|
26
|
+
*/
|
|
27
|
+
orphanTextB2tFSItemAddr: IbGibAddr;
|
|
28
|
+
/**
|
|
29
|
+
* So if merging `my-feature-branch` into `main`...
|
|
30
|
+
*
|
|
31
|
+
* this is the binary ibgib whose text is in `my-feature-branch`
|
|
32
|
+
*/
|
|
33
|
+
orphanTextBinAddr: IbGibAddr | undefined;
|
|
34
|
+
}
|