Fast implementation of Git in pure Go codeberg.org/lindenii/furgit
git go
6
fork

Configure Feed

Select the types of activity you want to include in your feed.

internal/peel: Purge

Runxi Yu f5a57eba 49f93cd5

-50
-50
internal/peel/peel.go
··· 1 - // Package peel peels Git object references through annotated tags. 2 - package peel 3 - 4 - import ( 5 - stderrors "errors" 6 - 7 - giterrors "codeberg.org/lindenii/furgit/errors" 8 - objectid "codeberg.org/lindenii/furgit/object/id" 9 - objectstore "codeberg.org/lindenii/furgit/object/store" 10 - "codeberg.org/lindenii/furgit/object/tag" 11 - objecttype "codeberg.org/lindenii/furgit/object/type" 12 - ) 13 - 14 - // ToCommit peels annotated tags transitively until a commit is reached. 15 - func ToCommit(store objectstore.Reader, id objectid.ObjectID) (objectid.ObjectID, error) { 16 - for { 17 - ty, _, err := store.ReadHeader(id) 18 - if err != nil { 19 - if stderrors.Is(err, objectstore.ErrObjectNotFound) { 20 - return objectid.ObjectID{}, &giterrors.ObjectMissingError{OID: id} 21 - } 22 - 23 - return objectid.ObjectID{}, err 24 - } 25 - 26 - if ty != objecttype.TypeTag { 27 - if ty != objecttype.TypeCommit { 28 - return objectid.ObjectID{}, &giterrors.ObjectTypeError{OID: id, Got: ty, Want: objecttype.TypeCommit} 29 - } 30 - 31 - return id, nil 32 - } 33 - 34 - _, content, err := store.ReadBytesContent(id) 35 - if err != nil { 36 - if stderrors.Is(err, objectstore.ErrObjectNotFound) { 37 - return objectid.ObjectID{}, &giterrors.ObjectMissingError{OID: id} 38 - } 39 - 40 - return objectid.ObjectID{}, err 41 - } 42 - 43 - tag, err := tag.Parse(content, id.Algorithm()) 44 - if err != nil { 45 - return objectid.ObjectID{}, err 46 - } 47 - 48 - id = tag.Target 49 - } 50 - }