+16
-31
utils/merkletrie/difftree.go
+16
-31
utils/merkletrie/difftree.go
···
297
297
case noMoreNoders:
298
298
return ret, nil
299
299
case onlyFromRemains:
300
-
if err = ret.AddRecursiveDelete(from); err != nil {
301
-
return nil, err
300
+
if !from.Skip() {
301
+
if err = ret.AddRecursiveDelete(from); err != nil {
302
+
return nil, err
303
+
}
302
304
}
303
305
if err = ii.nextFrom(); err != nil {
304
306
return nil, err
305
307
}
306
308
case onlyToRemains:
307
-
if to.Skip() {
308
-
if err = ret.AddRecursiveDelete(to); err != nil {
309
-
return nil, err
310
-
}
311
-
} else {
309
+
if !to.Skip() {
312
310
if err = ret.AddRecursiveInsert(to); err != nil {
313
311
return nil, err
314
312
}
···
317
315
return nil, err
318
316
}
319
317
case bothHaveNodes:
320
-
if from.Skip() {
321
-
if err = ret.AddRecursiveDelete(from); err != nil {
322
-
return nil, err
323
-
}
318
+
var err error
319
+
switch {
320
+
case from.Skip():
324
321
if from.Name() == to.Name() {
325
-
if err := ii.nextBoth(); err != nil {
326
-
return nil, err
327
-
}
322
+
err = ii.nextBoth()
328
323
} else {
329
-
if err := ii.nextFrom(); err != nil {
330
-
return nil, err
331
-
}
324
+
err = ii.nextFrom()
332
325
}
333
-
break
334
-
}
335
-
if to.Skip() {
336
-
if err = ret.AddRecursiveDelete(to); err != nil {
337
-
return nil, err
338
-
}
326
+
case to.Skip():
339
327
if from.Name() == to.Name() {
340
-
if err := ii.nextBoth(); err != nil {
341
-
return nil, err
342
-
}
328
+
err = ii.nextBoth()
343
329
} else {
344
-
if err := ii.nextTo(); err != nil {
345
-
return nil, err
346
-
}
330
+
err = ii.nextTo()
347
331
}
348
-
break
332
+
default:
333
+
err = diffNodes(&ret, ii)
349
334
}
350
335
351
-
if err = diffNodes(&ret, ii); err != nil {
336
+
if err != nil {
352
337
return nil, err
353
338
}
354
339
default: