Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Fargher <jfargher@gitlab.com>2021-10-28 00:24:59 +0300
committerJames Fargher <jfargher@gitlab.com>2021-11-08 03:00:51 +0300
commitaf6a9bc8e8d10ac0636165662f5fc1e3bff7a40f (patch)
treecccb54ce5e421581f131a003826f360f1866bed6
parentfe5a154a1a70c5a0696efddfbd7dccf2db82c670 (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.go23
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
}