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