8000 Merge pull request #1492 from onee-only/fix-sparse-checkout-status · go-git/go-git@c3c8410 · GitHub
[go: up one dir, main page]

Skip to content

Commit c3c8410

Browse files
pjbgfkane8n
authored andcommitted
Merge pull request #1492 from onee-only/fix-sparse-checkout-status
utils: merkletrie, Fix diff on sparse-checkout index. Fixes #1406
1 parent 6d4a5c6 commit c3c8410

File tree

3 files changed

+40
-24
lines changed

3 files changed

+40
-24
lines changed

utils/merkletrie/change.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,9 @@ func (l *Changes) addRecursive(root noder.Path, ctor noderToChangeFn) error {
131131
}
132132

133133
if !root.IsDir() {
134-
l.Add(ctor(root))
134+
if !root.Skip() {
135+
l.Add(ctor(root))
136+
}
135137
return nil
136138
}
137139

utils/merkletrie/difftree.go

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -297,18 +297,16 @@ func DiffTreeContext(ctx context.Context, fromTree, toTree noder.Noder,
297297
case noMoreNoders:
298298
return ret, nil
299299
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+
}
302304
}
303305
if err = ii.nextFrom(); err != nil {
304306
return nil, err
305307
}
306308
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() {
312310
if err = ret.AddRecursiveInsert(to); err != nil {
313311
return nil, err
314312
}
@@ -317,26 +315,25 @@ func DiffTreeContext(ctx context.Context, fromTree, toTree noder.Noder,
317315
return nil, err
318316
}
319317
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
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()
326325
}
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
326+
case to.Skip():
327+
if from.Name() == to.Name() {
328+
err = ii.nextBoth()
329+
} else {
330+
err = ii.nextTo()
335331
}
336-
break
332+
default:
333+
err = diffNodes(&ret, ii)
337334
}
338335

339-
if err = diffNodes(&ret, ii); err != nil {
336+
if err != nil {
340337
return nil, err
341338
}
342339
default:

worktree_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,7 +1359,24 @@ func (s *WorktreeSuite) TestStatusAfterCheckout(c *C) {
13591359
status, err := w.Status()
13601360
c.Assert(err, IsNil)
13611361
c.Assert(status.IsClean(), Equals, true)
1362+
}
1363+
1364+
func (s *WorktreeSuite) TestStatusAfterSparseCheckout(c *C) {
1365+
fs := memfs.New()
1366+
w := &Worktree{
1367+
r: s.Repository,
1368+
Filesystem: fs,
1369+
}
13621370

1371+
err := w.Checkout(&CheckoutOptions{
1372+
SparseCheckoutDirectories: []string{"php"},
1373+
Force: true,
1374+
})
1375+
c.Assert(err, IsNil)
1376+
1377+
status, err := w.Status()
1378+
c.Assert(err, IsNil)
1379+
c.Assert(status.IsClean(), Equals, true)
13631380
}
13641381

13651382
func (s *WorktreeSuite) TestStatusModified(c *C) {

0 commit comments

Comments
 (0)
0