+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
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 err := ii.nextBoth(); err != nil {
325
-
return nil, err
326
}
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
337
}
338
339
-
if err = diffNodes(&ret, ii); err != nil {
340
return nil, err
341
}
342
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:
+18
worktree_test.go
+18
worktree_test.go
···
1373
s.True(status.IsClean())
1374
}
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
+
1394
func (s *WorktreeSuite) TestStatusModified() {
1395
fs := s.TemporalFilesystem()
1396