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:
authorPatrick Steinhardt <psteinhardt@gitlab.com>2020-12-17 10:00:15 +0300
committerPatrick Steinhardt <psteinhardt@gitlab.com>2020-12-17 10:00:15 +0300
commit168ae8a4c7458d832c8ef1febcc8d4d6ddebd79d (patch)
tree213140e3e4ca467906043818b9edc75e66fc4e44
parent10da16d708a613b91eff2272dbd12d51718c2b6b (diff)
parent3bd9cc8b8be5bca1bebda939e660f6025b8fabc4 (diff)
Merge branch 'pks-ref-delete-refactoring' into 'master'
ref: Refactor the way we find references which are to be deleted See merge request gitlab-org/gitaly!2939
-rw-r--r--internal/gitaly/service/ref/delete_refs.go36
1 files changed, 13 insertions, 23 deletions
diff --git a/internal/gitaly/service/ref/delete_refs.go b/internal/gitaly/service/ref/delete_refs.go
index 6444c5743..3153440f6 100644
--- a/internal/gitaly/service/ref/delete_refs.go
+++ b/internal/gitaly/service/ref/delete_refs.go
@@ -1,7 +1,6 @@
package ref
import (
- "bufio"
"context"
"errors"
"fmt"
@@ -47,40 +46,31 @@ func (s *server) DeleteRefs(ctx context.Context, in *gitalypb.DeleteRefsRequest)
}
func refsToRemove(ctx context.Context, req *gitalypb.DeleteRefsRequest) ([]string, error) {
- var refs []string
if len(req.Refs) > 0 {
- for _, ref := range req.Refs {
- refs = append(refs, string(ref))
+ refs := make([]string, len(req.Refs))
+ for i, ref := range req.Refs {
+ refs[i] = string(ref)
}
return refs, nil
}
- cmd, err := git.SafeCmd(ctx, req.GetRepository(), nil, git.SubCmd{
- Name: "for-each-ref",
- Flags: []git.Option{git.Flag{Name: "--format=%(refname)"}},
- })
- if err != nil {
- return nil, fmt.Errorf("error setting up for-each-ref command: %v", err)
+ prefixes := make([]string, len(req.ExceptWithPrefix))
+ for i, prefix := range req.ExceptWithPrefix {
+ prefixes[i] = string(prefix)
}
- var prefixes []string
- for _, prefix := range req.ExceptWithPrefix {
- prefixes = append(prefixes, string(prefix))
+ existingRefs, err := git.NewRepository(req.GetRepository()).GetReferences(ctx, "")
+ if err != nil {
+ return nil, err
}
- scanner := bufio.NewScanner(cmd)
- for scanner.Scan() {
- refName := scanner.Text()
-
- if hasAnyPrefix(refName, prefixes) {
+ var refs []string
+ for _, existingRef := range existingRefs {
+ if hasAnyPrefix(existingRef.Name, prefixes) {
continue
}
- refs = append(refs, refName)
- }
-
- if err != nil {
- return nil, fmt.Errorf("error listing refs: %v", cmd.Wait())
+ refs = append(refs, existingRef.Name)
}
return refs, nil