aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFilip Navara <navara@emclient.com>2019-04-24 09:30:00 +0200
committerFilip Navara <navara@emclient.com>2019-04-24 09:30:00 +0200
commitb0e21ee09bde46ab5002c04680885890390d3cf7 (patch)
tree0e11be076e10c024b4bbc7712282ed623595f1c9
parent20ccd734ba1a38498d268226a3aa2e5f5f80d757 (diff)
downloadgo-git-b0e21ee09bde46ab5002c04680885890390d3cf7.tar.gz
Better fix for the getObjectType problem in the iterator
Signed-off-by: Filip Navara <navara@emclient.com>
-rw-r--r--plumbing/format/packfile/packfile.go15
1 files changed, 9 insertions, 6 deletions
diff --git a/plumbing/format/packfile/packfile.go b/plumbing/format/packfile/packfile.go
index d4e6010..a8f3d2b 100644
--- a/plumbing/format/packfile/packfile.go
+++ b/plumbing/format/packfile/packfile.go
@@ -488,18 +488,21 @@ func (i *objectIter) Next() (plumbing.EncodedObject, error) {
}
if h.Type == plumbing.REFDeltaObject || h.Type == plumbing.OFSDeltaObject {
- obj, err := i.p.getNextObject(h, e.Hash)
+ typ, err := i.p.getObjectType(h)
if err != nil {
return nil, err
}
- if obj.Type() == i.typ {
- return obj, nil
+ if typ != i.typ {
+ continue
+ }
+ // getObjectType will seek in the file so we cannot use getNextObject safely
+ return i.p.objectAtOffset(int64(e.Offset), e.Hash)
+ } else {
+ if h.Type != i.typ {
+ continue
}
- } else if h.Type == i.typ {
return i.p.getNextObject(h, e.Hash)
}
-
- continue
}
}