Skip to content

Commit 7aeea0f

Browse files
committed
fix(Scanner): Fix move stability
Signed-off-by: Marcel Klehr <[email protected]>
1 parent d3015b2 commit 7aeea0f

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

src/lib/Scanner.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@ export default class Scanner<L1 extends TItemLocation, L2 extends TItemLocation>
1717
private mergeable: (i1: TItem<TItemLocation>, i2: TItem<TItemLocation>) => boolean
1818
private preserveOrder: boolean
1919
private checkHashes: boolean
20+
private hasCache: boolean
2021

2122
private result: ScanResult<L2, L1>
2223

23-
constructor(oldTree:TItem<L1>, newTree:TItem<L2>, mergeable:(i1:TItem<TItemLocation>, i2:TItem<TItemLocation>)=>boolean, preserveOrder:boolean, checkHashes = true) {
24+
constructor(oldTree:TItem<L1>, newTree:TItem<L2>, mergeable:(i1:TItem<TItemLocation>, i2:TItem<TItemLocation>)=>boolean, preserveOrder:boolean, checkHashes = true, hasCache = true) {
2425
this.oldTree = oldTree
2526
this.newTree = newTree
2627
this.mergeable = mergeable
2728
this.preserveOrder = preserveOrder
2829
this.checkHashes = typeof checkHashes === 'undefined' ? true : checkHashes
30+
this.hasCache = hasCache
2931
this.result = {
3032
CREATE: new Diff(),
3133
UPDATE: new Diff(),
@@ -159,7 +161,9 @@ export default class Scanner<L1 extends TItemLocation, L2 extends TItemLocation>
159161
await Promise.resolve()
160162
const removedItem = removeAction.payload
161163

162-
if (this.mergeable(removedItem, createdItem) && (removedItem.type !== 'folder' || removedItem.childrenSimilarity(createdItem) > 0.8)) {
164+
if (this.mergeable(removedItem, createdItem) &&
165+
(removedItem.type !== 'folder' ||
166+
(!this.hasCache && removedItem.childrenSimilarity(createdItem) > 0.8))) {
163167
this.result.CREATE.retract(createAction)
164168
this.result.REMOVE.retract(removeAction)
165169
this.result.MOVE.commit({

src/lib/strategies/Merge.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export default class MergeSyncProcess extends DefaultSyncProcess {
2323
return false
2424
},
2525
this.preserveOrder,
26+
false,
2627
false
2728
)
2829
const serverScanner = new Scanner(
@@ -36,6 +37,7 @@ export default class MergeSyncProcess extends DefaultSyncProcess {
3637
return false
3738
},
3839
this.preserveOrder,
40+
false,
3941
false
4042
)
4143
const localScanResult = await localScanner.run()
@@ -96,6 +98,7 @@ export default class MergeSyncProcess extends DefaultSyncProcess {
9698
return false
9799
},
98100
this.preserveOrder,
101+
false,
99102
false
100103
)
101104
await subScanner.run()

src/lib/strategies/Unidirectional.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export default class UnidirectionalSyncProcess extends DefaultStrategy {
5151
return false
5252
},
5353
this.preserveOrder,
54+
false,
5455
false
5556
)
5657
const serverScanner = new Scanner(
@@ -64,6 +65,7 @@ export default class UnidirectionalSyncProcess extends DefaultStrategy {
6465
return false
6566
},
6667
this.preserveOrder,
68+
false,
6769
false
6870
)
6971
const localScanResult = await localScanner.run()

0 commit comments

Comments
 (0)