diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2020-12-17 10:00:15 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2020-12-17 10:00:15 +0300 |
commit | 168ae8a4c7458d832c8ef1febcc8d4d6ddebd79d (patch) | |
tree | 213140e3e4ca467906043818b9edc75e66fc4e44 | |
parent | 10da16d708a613b91eff2272dbd12d51718c2b6b (diff) | |
parent | 3bd9cc8b8be5bca1bebda939e660f6025b8fabc4 (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.go | 36 |
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 |