fork of go-git with some jj specific features

utils: merkletrie, Fix diff on sparse-checkout index. Fixes #1406

onee-only 9dc151a7 00907d9e

Changed files
+37 -5
utils
merkletrie
+3 -1
utils/merkletrie/change.go
··· 131 131 } 132 132 133 133 if !root.IsDir() { 134 - l.Add(ctor(root)) 134 + if !root.Skip() { 135 + l.Add(ctor(root)) 136 + } 135 137 return nil 136 138 } 137 139
+16 -4
utils/merkletrie/difftree.go
··· 321 321 if err = ret.AddRecursiveDelete(from); err != nil { 322 322 return nil, err 323 323 } 324 - if err := ii.nextBoth(); err != nil { 325 - return nil, err 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 + } 326 332 } 327 333 break 328 334 } ··· 330 336 if err = ret.AddRecursiveDelete(to); err != nil { 331 337 return nil, err 332 338 } 333 - if err := ii.nextBoth(); err != nil { 334 - return nil, err 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 + } 335 347 } 336 348 break 337 349 }
+18
worktree_test.go
··· 1373 1373 s.True(status.IsClean()) 1374 1374 } 1375 1375 1376 + func (s *WorktreeSuite) TestStatusAfterSparseCheckout() { 1377 + fs := memfs.New() 1378 + w := &Worktree{ 1379 + r: s.Repository, 1380 + Filesystem: fs, 1381 + } 1382 + 1383 + err := w.Checkout(&CheckoutOptions{ 1384 + SparseCheckoutDirectories: []string{"php"}, 1385 + Force: true, 1386 + }) 1387 + s.Require().NoError(err) 1388 + 1389 + status, err := w.Status() 1390 + s.Require().NoError(err) 1391 + s.True(status.IsClean(), status) 1392 + } 1393 + 1376 1394 func (s *WorktreeSuite) TestStatusModified() { 1377 1395 fs := s.TemporalFilesystem() 1378 1396