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.

object/type, format/packfile: API cleanups

Runxi Yu 0109f090 9da262c9

+30 -45
+2 -2
format/packfile/header.go
··· 3 3 // Signature is the 4-byte "PACK" magic at the start of pack files. 4 4 const Signature = 0x5041434b 5 5 6 - // VersionSupported reports whether one pack version is supported. 7 - func VersionSupported(version uint32) bool { 6 + // SupportedVersion reports whether one pack version is supported. 7 + func SupportedVersion(version uint32) bool { 8 8 return version == 2 || version == 3 9 9 }
+1 -2
format/packfile/ingest/drain.go
··· 4 4 "fmt" 5 5 "io" 6 6 7 - packfmt "codeberg.org/lindenii/furgit/format/packfile" 8 7 "codeberg.org/lindenii/furgit/internal/compress/zlib" 9 8 objectheader "codeberg.org/lindenii/furgit/object/header" 10 9 objectid "codeberg.org/lindenii/furgit/object/id" ··· 25 24 26 25 var total int64 27 26 28 - if packfmt.IsBaseObjectType(record.packedType) { 27 + if record.packedType.IsBaseObject() { 29 28 header, ok := objectheader.Encode(record.packedType, record.declaredSize) 30 29 if !ok { 31 30 return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "encode object header"}
+1 -2
format/packfile/ingest/entry.go
··· 3 3 import ( 4 4 "fmt" 5 5 6 - packfmt "codeberg.org/lindenii/furgit/format/packfile" 7 6 objecttype "codeberg.org/lindenii/furgit/object/type" 8 7 ) 9 8 ··· 54 53 55 54 record.crc32 = crc 56 55 57 - if packfmt.IsBaseObjectType(record.packedType) { 56 + if record.packedType.IsBaseObject() { 58 57 record.objectID = oid 59 58 record.realType = record.packedType 60 59 record.resolved = true
+1 -1
format/packfile/ingest/header.go
··· 36 36 } 37 37 38 38 version := binary.BigEndian.Uint32(hdr[4:8]) 39 - if !packfile.VersionSupported(version) { 39 + if !packfile.SupportedVersion(version) { 40 40 return HeaderInfo{}, &InvalidPackHeaderError{ 41 41 Reason: fmt.Sprintf("unsupported version %d", version), 42 42 }
+1 -2
format/packfile/ingest/record_content.go
··· 3 3 import ( 4 4 "fmt" 5 5 6 - packfmt "codeberg.org/lindenii/furgit/format/packfile" 7 6 objecttype "codeberg.org/lindenii/furgit/object/type" 8 7 ) 9 8 10 9 // readBaseRecordContent reads canonical base content for one non-delta record. 11 10 func readBaseRecordContent(state *ingestState, idx int) (objecttype.Type, []byte, error) { 12 11 record := state.records[idx] 13 - if !packfmt.IsBaseObjectType(record.packedType) { 12 + if !record.packedType.IsBaseObject() { 14 13 return objecttype.TypeInvalid, nil, fmt.Errorf("packfile/ingest: record %d is not a base object", idx) 15 14 } 16 15
+1 -2
format/packfile/ingest/record_resolve.go
··· 3 3 import ( 4 4 "fmt" 5 5 6 - packfmt "codeberg.org/lindenii/furgit/format/packfile" 7 6 objecttype "codeberg.org/lindenii/furgit/object/type" 8 7 ) 9 8 ··· 25 24 return ty, content, nil 26 25 } 27 26 28 - if packfmt.IsBaseObjectType(record.packedType) { 27 + if record.packedType.IsBaseObject() { 29 28 ty, content, err := readBaseRecordContent(state, idx) 30 29 if err != nil { 31 30 return objecttype.TypeInvalid, nil, err
-16
format/packfile/object_type.go
··· 1 - package packfile 2 - 3 - import objecttype "codeberg.org/lindenii/furgit/object/type" 4 - 5 - // IsBaseObjectType reports whether ty is one of the four canonical object 6 - // types encoded directly in pack entries. 7 - func IsBaseObjectType(ty objecttype.Type) bool { 8 - switch ty { 9 - case objecttype.TypeCommit, objecttype.TypeTree, objecttype.TypeBlob, objecttype.TypeTag: 10 - return true 11 - case objecttype.TypeInvalid, objecttype.TypeFuture, objecttype.TypeOfsDelta, objecttype.TypeRefDelta: 12 - return false 13 - default: 14 - return false 15 - } 16 - }
+1 -2
object/store/packed/delta_build_chain.go
··· 3 3 import ( 4 4 "fmt" 5 5 6 - packfmt "codeberg.org/lindenii/furgit/format/packfile" 7 6 objecttype "codeberg.org/lindenii/furgit/object/type" 8 7 ) 9 8 ··· 26 25 return deltaChain{}, err 27 26 } 28 27 29 - if packfmt.IsBaseObjectType(meta.ty) { 28 + if meta.ty.IsBaseObject() { 30 29 chain.baseLoc = current 31 30 chain.baseType = meta.ty 32 31
+1 -2
object/store/packed/delta_resolve_chain_start.go
··· 3 3 import ( 4 4 "fmt" 5 5 6 - packfmt "codeberg.org/lindenii/furgit/format/packfile" 7 6 objecttype "codeberg.org/lindenii/furgit/object/type" 8 7 ) 9 8 ··· 38 37 return objecttype.TypeInvalid, nil, 0, err 39 38 } 40 39 41 - if !packfmt.IsBaseObjectType(meta.ty) { 40 + if !meta.ty.IsBaseObject() { 42 41 return objecttype.TypeInvalid, nil, 0, fmt.Errorf("objectstore/packed: delta chain base is not a base object") 43 42 } 44 43
+2 -5
object/store/packed/delta_resolve_content.go
··· 1 1 package packed 2 2 3 - import ( 4 - packfmt "codeberg.org/lindenii/furgit/format/packfile" 5 - objecttype "codeberg.org/lindenii/furgit/object/type" 6 - ) 3 + import objecttype "codeberg.org/lindenii/furgit/object/type" 7 4 8 5 // deltaResolveContent resolves one object's content bytes from its pack location. 9 6 func (store *Store) deltaResolveContent(start location) (objecttype.Type, []byte, error) { ··· 18 15 } 19 16 20 17 declaredSize := meta.size 21 - if !packfmt.IsBaseObjectType(meta.ty) { 18 + if !meta.ty.IsBaseObject() { 22 19 declaredSize, err = deltaDeclaredSizeAt(pack, meta.dataOffset) 23 20 if err != nil { 24 21 return objecttype.TypeInvalid, nil, err
+1 -1
object/store/packed/pack.go
··· 47 47 } 48 48 49 49 version := binary.BigEndian.Uint32(data[4:8]) 50 - if !packfmt.VersionSupported(version) { 50 + if !packfmt.SupportedVersion(version) { 51 51 _ = syscall.Munmap(data) 52 52 53 53 return nil, fmt.Errorf("objectstore/packed: pack %q unsupported version %d", name, version)
+2 -3
object/store/packed/read_header_resolve.go
··· 3 3 import ( 4 4 "fmt" 5 5 6 - packfmt "codeberg.org/lindenii/furgit/format/packfile" 7 6 objecttype "codeberg.org/lindenii/furgit/object/type" 8 7 ) 9 8 ··· 26 25 } 27 26 28 27 if declaredSize < 0 { 29 - if packfmt.IsBaseObjectType(meta.ty) { 28 + if meta.ty.IsBaseObject() { 30 29 declaredSize = meta.size 31 30 } else { 32 31 size, err := deltaDeclaredSizeAt(pack, meta.dataOffset) ··· 38 37 } 39 38 } 40 39 41 - if packfmt.IsBaseObjectType(meta.ty) { 40 + if meta.ty.IsBaseObject() { 42 41 return meta.ty, declaredSize, nil 43 42 } 44 43
+2 -3
object/store/packed/read_reader.go
··· 5 5 "fmt" 6 6 "io" 7 7 8 - packfmt "codeberg.org/lindenii/furgit/format/packfile" 9 8 "codeberg.org/lindenii/furgit/internal/iolimit" 10 9 objectheader "codeberg.org/lindenii/furgit/object/header" 11 10 objectid "codeberg.org/lindenii/furgit/object/id" ··· 30 29 return objecttype.TypeInvalid, 0, nil, err 31 30 } 32 31 33 - if packfmt.IsBaseObjectType(meta.ty) { 32 + if meta.ty.IsBaseObject() { 34 33 zr, err := zlibReaderAt(pack, meta.dataOffset) 35 34 if err != nil { 36 35 return objecttype.TypeInvalid, 0, nil, err ··· 67 66 return nil, err 68 67 } 69 68 70 - if packfmt.IsBaseObjectType(meta.ty) { 69 + if meta.ty.IsBaseObject() { 71 70 header, ok := objectheader.Encode(meta.ty, meta.size) 72 71 if !ok { 73 72 return nil, fmt.Errorf("objectstore/packed: failed to encode object header for type %d", meta.ty)
+1 -2
object/store/packed/read_size.go
··· 3 3 import ( 4 4 "fmt" 5 5 6 - packfmt "codeberg.org/lindenii/furgit/format/packfile" 7 6 objectid "codeberg.org/lindenii/furgit/object/id" 8 7 objecttype "codeberg.org/lindenii/furgit/object/type" 9 8 ) ··· 29 28 return 0, err 30 29 } 31 30 32 - if packfmt.IsBaseObjectType(meta.ty) { 31 + if meta.ty.IsBaseObject() { 33 32 return meta.size, nil 34 33 } 35 34
+13
object/type/objecttype.go
··· 14 14 TypeOfsDelta Type = 6 15 15 TypeRefDelta Type = 7 16 16 ) 17 + 18 + // IsBaseObject reports whether ty is one of the four canonical Git object 19 + // types encoded directly in pack entries. 20 + func (ty Type) IsBaseObject() bool { 21 + switch ty { 22 + case TypeCommit, TypeTree, TypeBlob, TypeTag: 23 + return true 24 + case TypeInvalid, TypeFuture, TypeOfsDelta, TypeRefDelta: 25 + return false 26 + default: 27 + return false 28 + } 29 + }