+3
-1
utils/merkletrie/change.go
+3
-1
utils/merkletrie/change.go
+20
-23
utils/merkletrie/difftree.go
+20
-23
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
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()
323
325
}
324
-
if err := ii.nextBoth(); err != nil {
325
-
return nil, err
326
+
case to.Skip():
327
+
if from.Name() == to.Name() {
328
+
err = ii.nextBoth()
329
+
} else {
330
+
err = ii.nextTo()
326
331
}
327
-
break
328
-
}
329
-
if to.Skip() {
330
-
if err = ret.AddRecursiveDelete(to); err != nil {
331
-
return nil, err
332
-
}
333
-
if err := ii.nextBoth(); err != nil {
334
-
return nil, err
335
-
}
336
-
break
332
+
default:
333
+
err = diffNodes(&ret, ii)
337
334
}
338
335
339
-
if err = diffNodes(&ret, ii); err != nil {
336
+
if err != nil {
340
337
return nil, err
341
338
}
342
339
default:
+18
worktree_test.go
+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