diff options
author | James Fargher <jfargher@gitlab.com> | 2021-10-28 00:24:59 +0300 |
---|---|---|
committer | James Fargher <jfargher@gitlab.com> | 2021-11-08 03:00:51 +0300 |
commit | af6a9bc8e8d10ac0636165662f5fc1e3bff7a40f (patch) | |
tree | cccb54ce5e421581f131a003826f360f1866bed6 | |
parent | fe5a154a1a70c5a0696efddfbd7dccf2db82c670 (diff) |
localrepo: Replace manual for-each-ref decoding in localrepo
Previously ref parsing was done in place. This replaces the parsing with
a shared implementation.
-rw-r--r-- | internal/git/localrepo/refs.go | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/internal/git/localrepo/refs.go b/internal/git/localrepo/refs.go index db4193df2..eef4b6c0c 100644 --- a/internal/git/localrepo/refs.go +++ b/internal/git/localrepo/refs.go @@ -107,25 +107,20 @@ func (repo *Repo) getReferences(ctx context.Context, limit uint, patterns ...str return nil, err } - scanner := bufio.NewScanner(cmd) + decoder := git.NewForEachRefDecoder(cmd) var refs []git.Reference - for scanner.Scan() { - line := bytes.SplitN(scanner.Bytes(), []byte{0}, 3) - if len(line) != 3 { - return nil, errors.New("unexpected reference format") - } - - if len(line[2]) == 0 { - refs = append(refs, git.NewReference(git.ReferenceName(line[0]), string(line[1]))) - } else { - refs = append(refs, git.NewSymbolicReference(git.ReferenceName(line[0]), string(line[1]))) + for { + var ref git.Reference + err := decoder.Decode(&ref) + if err == io.EOF { + break + } else if err != nil { + return nil, fmt.Errorf("reading standard input: %v", err) } + refs = append(refs, ref) } - if err := scanner.Err(); err != nil { - return nil, fmt.Errorf("reading standard input: %v", err) - } if err := cmd.Wait(); err != nil { return nil, err } |