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>2021-07-05 09:28:34 +0300
committerPatrick Steinhardt <psteinhardt@gitlab.com>2021-07-06 11:53:49 +0300
commit3122a2d6e750d5a3e7938875825fb6b8827a433c (patch)
treee587d68c2ac6f7a95b5464d4deeea4d4ec6e68a5
parent8c79cea06c7546ce97d6d27d33e79a5b626a41e9 (diff)
gitpipe: Extract function to send revision results
The code to send RevisionResults down the pipeline is kind of convoluted given that we need to watch out for context cancellation. Pull it out into a standalone function such that it can easily be reused by future callers.
-rw-r--r--internal/git/gitpipe/revision.go34
1 files changed, 15 insertions, 19 deletions
diff --git a/internal/git/gitpipe/revision.go b/internal/git/gitpipe/revision.go
index 70fabc36b..21954cc48 100644
--- a/internal/git/gitpipe/revision.go
+++ b/internal/git/gitpipe/revision.go
@@ -168,15 +168,6 @@ func Revlist(
go func() {
defer close(resultChan)
- sendResult := func(result RevisionResult) bool {
- select {
- case resultChan <- result:
- return false
- case <-ctx.Done():
- return true
- }
- }
-
flags := []git.Option{}
if cfg.objects {
@@ -247,7 +238,7 @@ func Revlist(
Args: revisions,
})
if err != nil {
- sendResult(RevisionResult{err: err})
+ sendRevisionResult(ctx, resultChan, RevisionResult{err: err})
return
}
@@ -267,20 +258,20 @@ func Revlist(
result.ObjectName = oidAndName[1]
}
- if isDone := sendResult(result); isDone {
+ if isDone := sendRevisionResult(ctx, resultChan, result); isDone {
return
}
}
if err := scanner.Err(); err != nil {
- sendResult(RevisionResult{
+ sendRevisionResult(ctx, resultChan, RevisionResult{
err: fmt.Errorf("scanning rev-list output: %w", err),
})
return
}
if err := revlist.Wait(); err != nil {
- sendResult(RevisionResult{
+ sendRevisionResult(ctx, resultChan, RevisionResult{
err: fmt.Errorf("rev-list pipeline command: %w", err),
})
return
@@ -304,18 +295,14 @@ func RevisionFilter(ctx context.Context, it RevisionIterator, filter func(Revisi
for it.Next() {
result := it.Result()
if filter(result) {
- select {
- case resultChan <- result:
- case <-ctx.Done():
+ if sendRevisionResult(ctx, resultChan, result) {
return
}
}
}
if err := it.Err(); err != nil {
- select {
- case resultChan <- RevisionResult{err: err}:
- case <-ctx.Done():
+ if sendRevisionResult(ctx, resultChan, RevisionResult{err: err}) {
return
}
}
@@ -325,3 +312,12 @@ func RevisionFilter(ctx context.Context, it RevisionIterator, filter func(Revisi
ch: resultChan,
}
}
+
+func sendRevisionResult(ctx context.Context, ch chan<- RevisionResult, result RevisionResult) bool {
+ select {
+ case ch <- result:
+ return false
+ case <-ctx.Done():
+ return true
+ }
+}