@ -30,6 +30,10 @@ type Parser struct {
func NewParser ( r io . Reader , format Format ) * Parser {
func NewParser ( r io . Reader , format Format ) * Parser {
scanner := bufio . NewScanner ( r )
scanner := bufio . NewScanner ( r )
// default MaxScanTokenSize = 64 kiB may be too small for some references,
// so allow the buffer to grow up to 4x if needed
scanner . Buffer ( nil , 4 * bufio . MaxScanTokenSize )
// in addition to the reference delimiter we specified in the --format,
// in addition to the reference delimiter we specified in the --format,
// `git for-each-ref` will always add a newline after every reference.
// `git for-each-ref` will always add a newline after every reference.
refDelim := make ( [ ] byte , 0 , len ( format . refDelim ) + 1 )
refDelim := make ( [ ] byte , 0 , len ( format . refDelim ) + 1 )
@ -70,6 +74,9 @@ func NewParser(r io.Reader, format Format) *Parser {
// { "objecttype": "tag", "refname:short": "v1.16.4", "object": "f460b7543ed500e49c133c2cd85c8c55ee9dbe27" }
// { "objecttype": "tag", "refname:short": "v1.16.4", "object": "f460b7543ed500e49c133c2cd85c8c55ee9dbe27" }
func ( p * Parser ) Next ( ) map [ string ] string {
func ( p * Parser ) Next ( ) map [ string ] string {
if ! p . scanner . Scan ( ) {
if ! p . scanner . Scan ( ) {
if err := p . scanner . Err ( ) ; err != nil {
p . err = err
}
return nil
return nil
}
}
fields , err := p . parseRef ( p . scanner . Text ( ) )
fields , err := p . parseRef ( p . scanner . Text ( ) )