fork of go-git with some jj specific features

utils: merkletrie, Simplify DiffTreeContext.

When node.Skip() == true, it means the node and all its descendants should be skipped.
Previously, we were still calling AddRecursiveDelete() on such nodes, which is redundant,
since addRecursive() skips the entire subtree.

This change removes those unnecessary AddRecursiveDelete() calls,
and also adds a missing check to skip the 'from' node in the 'onlyFromRemains' case.

Additionally, prettified the if-else structure in the switch case for better readability.

onee-only e8c9fcd5 9dc151a7

Changed files
+16 -31
utils
merkletrie
+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: