aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2023-08-12 14:05:02 +0200
committerGitHub <noreply@github.com>2023-08-12 14:05:02 +0200
commit20e62977a0509e2c79ef5d8d9173103a278b78ff (patch)
tree9a39ab11d0373caeaf34f2d06188c481d27f67d7
parenta0d225ce23af9f5dbe31521f19485c66d409e573 (diff)
parent429b913dc5519babfab47bf65222e32415a6c1bd (diff)
downloadgit-bug-20e62977a0509e2c79ef5d8d9173103a278b78ff.tar.gz
Merge pull request #1088 from MichaelMure/dependabot/go_modules/github.com/99designs/gqlgen-0.17.36
build(deps): bump github.com/99designs/gqlgen from 0.17.20 to 0.17.36
-rw-r--r--.codespellrc2
-rw-r--r--api/graphql/graph/bug.generated.go416
-rw-r--r--api/graphql/graph/identity.generated.go127
-rw-r--r--api/graphql/graph/label.generated.go133
-rw-r--r--api/graphql/graph/mutations.generated.go421
-rw-r--r--api/graphql/graph/operations.generated.go586
-rw-r--r--api/graphql/graph/prelude.generated.go245
-rw-r--r--api/graphql/graph/repository.generated.go203
-rw-r--r--api/graphql/graph/root.generated.go108
-rw-r--r--api/graphql/graph/root_.generated.go58
-rw-r--r--api/graphql/graph/timeline.generated.go708
-rw-r--r--api/graphql/graph/types.generated.go132
-rw-r--r--api/graphql/models/gen_models.go68
-rw-r--r--entities/identity/key.go19
-rw-r--r--entity/dag/common_test.go6
-rw-r--r--entity/dag/operation_pack.go55
-rw-r--r--entity/dag/operation_pack_test.go66
-rw-r--r--go.mod56
-rw-r--r--go.sum120
19 files changed, 2354 insertions, 1175 deletions
diff --git a/.codespellrc b/.codespellrc
index 502a0de7..322ab360 100644
--- a/.codespellrc
+++ b/.codespellrc
@@ -1,5 +1,5 @@
[codespell]
-skip = .git,.venv,*.svg,package-lock.json,go.mod,go.sum
+skip = .git,.venv,*.svg,package-lock.json,go.mod,go.sum,./misc/completion/*
# ot,fo,te - used as short variable names
# optionall - OptionAll but codespell is case insensitive
# testing - TestIn
diff --git a/api/graphql/graph/bug.generated.go b/api/graphql/graph/bug.generated.go
index ab9c6c34..a5685942 100644
--- a/api/graphql/graph/bug.generated.go
+++ b/api/graphql/graph/bug.generated.go
@@ -694,7 +694,7 @@ func (ec *executionContext) fieldContext_Bug_actors(ctx context.Context, field g
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Bug_actors_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -759,7 +759,7 @@ func (ec *executionContext) fieldContext_Bug_participants(ctx context.Context, f
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Bug_participants_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -824,7 +824,7 @@ func (ec *executionContext) fieldContext_Bug_comments(ctx context.Context, field
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Bug_comments_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -889,7 +889,7 @@ func (ec *executionContext) fieldContext_Bug_timeline(ctx context.Context, field
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Bug_timeline_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -954,7 +954,7 @@ func (ec *executionContext) fieldContext_Bug_operations(ctx context.Context, fie
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Bug_operations_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -1805,23 +1805,22 @@ var bugImplementors = []string{"Bug", "Authored"}
func (ec *executionContext) _Bug(ctx context.Context, sel ast.SelectionSet, obj models.BugWrapper) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, bugImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Bug")
case "id":
-
out.Values[i] = ec._Bug_id(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "humanId":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -1829,61 +1828,65 @@ func (ec *executionContext) _Bug(ctx context.Context, sel ast.SelectionSet, obj
}()
res = ec._Bug_humanId(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "status":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "status":
out.Values[i] = ec._Bug_status(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "title":
-
out.Values[i] = ec._Bug_title(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "labels":
-
out.Values[i] = ec._Bug_labels(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "author":
-
out.Values[i] = ec._Bug_author(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "createdAt":
-
out.Values[i] = ec._Bug_createdAt(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "lastEdit":
-
out.Values[i] = ec._Bug_lastEdit(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "actors":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -1891,19 +1894,35 @@ func (ec *executionContext) _Bug(ctx context.Context, sel ast.SelectionSet, obj
}()
res = ec._Bug_actors(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "participants":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -1911,19 +1930,35 @@ func (ec *executionContext) _Bug(ctx context.Context, sel ast.SelectionSet, obj
}()
res = ec._Bug_participants(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "comments":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -1931,19 +1966,35 @@ func (ec *executionContext) _Bug(ctx context.Context, sel ast.SelectionSet, obj
}()
res = ec._Bug_comments(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "timeline":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -1951,19 +2002,35 @@ func (ec *executionContext) _Bug(ctx context.Context, sel ast.SelectionSet, obj
}()
res = ec._Bug_timeline(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "operations":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -1971,23 +2038,51 @@ func (ec *executionContext) _Bug(ctx context.Context, sel ast.SelectionSet, obj
}()
res = ec._Bug_operations(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -1995,48 +2090,53 @@ var bugConnectionImplementors = []string{"BugConnection"}
func (ec *executionContext) _BugConnection(ctx context.Context, sel ast.SelectionSet, obj *models.BugConnection) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, bugConnectionImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("BugConnection")
case "edges":
-
out.Values[i] = ec._BugConnection_edges(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "nodes":
-
out.Values[i] = ec._BugConnection_nodes(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "pageInfo":
-
out.Values[i] = ec._BugConnection_pageInfo(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "totalCount":
-
out.Values[i] = ec._BugConnection_totalCount(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2044,34 +2144,43 @@ var bugEdgeImplementors = []string{"BugEdge"}
func (ec *executionContext) _BugEdge(ctx context.Context, sel ast.SelectionSet, obj *models.BugEdge) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, bugEdgeImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("BugEdge")
case "cursor":
-
out.Values[i] = ec._BugEdge_cursor(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "node":
-
out.Values[i] = ec._BugEdge_node(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2079,8 +2188,9 @@ var commentImplementors = []string{"Comment", "Authored"}
func (ec *executionContext) _Comment(ctx context.Context, sel ast.SelectionSet, obj *bug.Comment) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, commentImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
@@ -2088,7 +2198,7 @@ func (ec *executionContext) _Comment(ctx context.Context, sel ast.SelectionSet,
case "id":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2096,19 +2206,35 @@ func (ec *executionContext) _Comment(ctx context.Context, sel ast.SelectionSet,
}()
res = ec._Comment_id(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2116,37 +2242,61 @@ func (ec *executionContext) _Comment(ctx context.Context, sel ast.SelectionSet,
}()
res = ec._Comment_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "message":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "message":
out.Values[i] = ec._Comment_message(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "files":
-
out.Values[i] = ec._Comment_files(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2154,48 +2304,53 @@ var commentConnectionImplementors = []string{"CommentConnection"}
func (ec *executionContext) _CommentConnection(ctx context.Context, sel ast.SelectionSet, obj *models.CommentConnection) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, commentConnectionImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("CommentConnection")
case "edges":
-
out.Values[i] = ec._CommentConnection_edges(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "nodes":
-
out.Values[i] = ec._CommentConnection_nodes(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "pageInfo":
-
out.Values[i] = ec._CommentConnection_pageInfo(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "totalCount":
-
out.Values[i] = ec._CommentConnection_totalCount(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2203,34 +2358,43 @@ var commentEdgeImplementors = []string{"CommentEdge"}
func (ec *executionContext) _CommentEdge(ctx context.Context, sel ast.SelectionSet, obj *models.CommentEdge) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, commentEdgeImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("CommentEdge")
case "cursor":
-
out.Values[i] = ec._CommentEdge_cursor(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "node":
-
out.Values[i] = ec._CommentEdge_node(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
diff --git a/api/graphql/graph/identity.generated.go b/api/graphql/graph/identity.generated.go
index 51aa188b..1fe6ac23 100644
--- a/api/graphql/graph/identity.generated.go
+++ b/api/graphql/graph/identity.generated.go
@@ -706,23 +706,22 @@ var identityImplementors = []string{"Identity"}
func (ec *executionContext) _Identity(ctx context.Context, sel ast.SelectionSet, obj models.IdentityWrapper) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, identityImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Identity")
case "id":
-
out.Values[i] = ec._Identity_id(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "humanId":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -730,53 +729,69 @@ func (ec *executionContext) _Identity(ctx context.Context, sel ast.SelectionSet,
}()
res = ec._Identity_humanId(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "name":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "name":
out.Values[i] = ec._Identity_name(ctx, field, obj)
-
case "email":
-
out.Values[i] = ec._Identity_email(ctx, field, obj)
-
case "login":
-
out.Values[i] = ec._Identity_login(ctx, field, obj)
-
case "displayName":
-
out.Values[i] = ec._Identity_displayName(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "avatarUrl":
-
out.Values[i] = ec._Identity_avatarUrl(ctx, field, obj)
-
case "isProtected":
-
out.Values[i] = ec._Identity_isProtected(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -784,48 +799,53 @@ var identityConnectionImplementors = []string{"IdentityConnection"}
func (ec *executionContext) _IdentityConnection(ctx context.Context, sel ast.SelectionSet, obj *models.IdentityConnection) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, identityConnectionImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("IdentityConnection")
case "edges":
-
out.Values[i] = ec._IdentityConnection_edges(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "nodes":
-
out.Values[i] = ec._IdentityConnection_nodes(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "pageInfo":
-
out.Values[i] = ec._IdentityConnection_pageInfo(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "totalCount":
-
out.Values[i] = ec._IdentityConnection_totalCount(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -833,34 +853,43 @@ var identityEdgeImplementors = []string{"IdentityEdge"}
func (ec *executionContext) _IdentityEdge(ctx context.Context, sel ast.SelectionSet, obj *models.IdentityEdge) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, identityEdgeImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("IdentityEdge")
case "cursor":
-
out.Values[i] = ec._IdentityEdge_cursor(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "node":
-
out.Values[i] = ec._IdentityEdge_node(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
diff --git a/api/graphql/graph/label.generated.go b/api/graphql/graph/label.generated.go
index 2e2dd12f..c5ebe0e0 100644
--- a/api/graphql/graph/label.generated.go
+++ b/api/graphql/graph/label.generated.go
@@ -440,8 +440,9 @@ var labelImplementors = []string{"Label"}
func (ec *executionContext) _Label(ctx context.Context, sel ast.SelectionSet, obj *bug.Label) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, labelImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
@@ -449,7 +450,7 @@ func (ec *executionContext) _Label(ctx context.Context, sel ast.SelectionSet, ob
case "name":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -457,19 +458,35 @@ func (ec *executionContext) _Label(ctx context.Context, sel ast.SelectionSet, ob
}()
res = ec._Label_name(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "color":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -477,23 +494,51 @@ func (ec *executionContext) _Label(ctx context.Context, sel ast.SelectionSet, ob
}()
res = ec._Label_color(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -501,48 +546,53 @@ var labelConnectionImplementors = []string{"LabelConnection"}
func (ec *executionContext) _LabelConnection(ctx context.Context, sel ast.SelectionSet, obj *models.LabelConnection) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, labelConnectionImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("LabelConnection")
case "edges":
-
out.Values[i] = ec._LabelConnection_edges(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "nodes":
-
out.Values[i] = ec._LabelConnection_nodes(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "pageInfo":
-
out.Values[i] = ec._LabelConnection_pageInfo(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "totalCount":
-
out.Values[i] = ec._LabelConnection_totalCount(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -550,34 +600,43 @@ var labelEdgeImplementors = []string{"LabelEdge"}
func (ec *executionContext) _LabelEdge(ctx context.Context, sel ast.SelectionSet, obj *models.LabelEdge) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, labelEdgeImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("LabelEdge")
case "cursor":
-
out.Values[i] = ec._LabelEdge_cursor(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "node":
-
out.Values[i] = ec._LabelEdge_node(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
diff --git a/api/graphql/graph/mutations.generated.go b/api/graphql/graph/mutations.generated.go
index 11604d11..6b3755ba 100644
--- a/api/graphql/graph/mutations.generated.go
+++ b/api/graphql/graph/mutations.generated.go
@@ -8,6 +8,7 @@ import (
"fmt"
"strconv"
"sync"
+ "sync/atomic"
"github.com/99designs/gqlgen/graphql"
"github.com/MichaelMure/git-bug/api/graphql/models"
@@ -1824,42 +1825,47 @@ func (ec *executionContext) unmarshalInputAddCommentAndCloseBugInput(ctx context
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("clientMutationId"))
- it.ClientMutationID, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.ClientMutationID = data
case "repoRef":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("repoRef"))
- it.RepoRef, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.RepoRef = data
case "prefix":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("prefix"))
- it.Prefix, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Prefix = data
case "message":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("message"))
- it.Message, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Message = data
case "files":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("files"))
- it.Files, err = ec.unmarshalOHash2ᚕgithubᚗcomᚋMichaelMureᚋgitᚑbugᚋrepositoryᚐHashᚄ(ctx, v)
+ data, err := ec.unmarshalOHash2ᚕgithubᚗcomᚋMichaelMureᚋgitᚑbugᚋrepositoryᚐHashᚄ(ctx, v)
if err != nil {
return it, err
}
+ it.Files = data
}
}
@@ -1884,42 +1890,47 @@ func (ec *executionContext) unmarshalInputAddCommentAndReopenBugInput(ctx contex
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("clientMutationId"))
- it.ClientMutationID, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.ClientMutationID = data
case "repoRef":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("repoRef"))
- it.RepoRef, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.RepoRef = data
case "prefix":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("prefix"))
- it.Prefix, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Prefix = data
case "message":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("message"))
- it.Message, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Message = data
case "files":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("files"))
- it.Files, err = ec.unmarshalOHash2ᚕgithubᚗcomᚋMichaelMureᚋgitᚑbugᚋrepositoryᚐHashᚄ(ctx, v)
+ data, err := ec.unmarshalOHash2ᚕgithubᚗcomᚋMichaelMureᚋgitᚑbugᚋrepositoryᚐHashᚄ(ctx, v)
if err != nil {
return it, err
}
+ it.Files = data
}
}
@@ -1944,42 +1955,47 @@ func (ec *executionContext) unmarshalInputAddCommentInput(ctx context.Context, o
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("clientMutationId"))
- it.ClientMutationID, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.ClientMutationID = data
case "repoRef":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("repoRef"))
- it.RepoRef, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.RepoRef = data
case "prefix":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("prefix"))
- it.Prefix, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Prefix = data
case "message":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("message"))
- it.Message, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Message = data
case "files":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("files"))
- it.Files, err = ec.unmarshalOHash2ᚕgithubᚗcomᚋMichaelMureᚋgitᚑbugᚋrepositoryᚐHashᚄ(ctx, v)
+ data, err := ec.unmarshalOHash2ᚕgithubᚗcomᚋMichaelMureᚋgitᚑbugᚋrepositoryᚐHashᚄ(ctx, v)
if err != nil {
return it, err
}
+ it.Files = data
}
}
@@ -2004,42 +2020,47 @@ func (ec *executionContext) unmarshalInputChangeLabelInput(ctx context.Context,
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("clientMutationId"))
- it.ClientMutationID, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.ClientMutationID = data
case "repoRef":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("repoRef"))
- it.RepoRef, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.RepoRef = data
case "prefix":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("prefix"))
- it.Prefix, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Prefix = data
case "added":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("added"))
- it.Added, err = ec.unmarshalOString2ᚕstringᚄ(ctx, v)
+ data, err := ec.unmarshalOString2ᚕstringᚄ(ctx, v)
if err != nil {
return it, err
}
+ it.Added = data
case "Removed":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("Removed"))
- it.Removed, err = ec.unmarshalOString2ᚕstringᚄ(ctx, v)
+ data, err := ec.unmarshalOString2ᚕstringᚄ(ctx, v)
if err != nil {
return it, err
}
+ it.Removed = data
}
}
@@ -2064,26 +2085,29 @@ func (ec *executionContext) unmarshalInputCloseBugInput(ctx context.Context, obj
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("clientMutationId"))
- it.ClientMutationID, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.ClientMutationID = data
case "repoRef":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("repoRef"))
- it.RepoRef, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.RepoRef = data
case "prefix":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("prefix"))
- it.Prefix, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Prefix = data
}
}
@@ -2108,42 +2132,47 @@ func (ec *executionContext) unmarshalInputEditCommentInput(ctx context.Context,
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("clientMutationId"))
- it.ClientMutationID, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.ClientMutationID = data
case "repoRef":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("repoRef"))
- it.RepoRef, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.RepoRef = data
case "targetPrefix":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("targetPrefix"))
- it.TargetPrefix, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.TargetPrefix = data
case "message":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("message"))
- it.Message, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Message = data
case "files":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("files"))
- it.Files, err = ec.unmarshalOHash2ᚕgithubᚗcomᚋMichaelMureᚋgitᚑbugᚋrepositoryᚐHashᚄ(ctx, v)
+ data, err := ec.unmarshalOHash2ᚕgithubᚗcomᚋMichaelMureᚋgitᚑbugᚋrepositoryᚐHashᚄ(ctx, v)
if err != nil {
return it, err
}
+ it.Files = data
}
}
@@ -2168,42 +2197,47 @@ func (ec *executionContext) unmarshalInputNewBugInput(ctx context.Context, obj i
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("clientMutationId"))
- it.ClientMutationID, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.ClientMutationID = data
case "repoRef":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("repoRef"))
- it.RepoRef, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.RepoRef = data
case "title":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("title"))
- it.Title, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Title = data
case "message":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("message"))
- it.Message, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Message = data
case "files":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("files"))
- it.Files, err = ec.unmarshalOHash2ᚕgithubᚗcomᚋMichaelMureᚋgitᚑbugᚋrepositoryᚐHashᚄ(ctx, v)
+ data, err := ec.unmarshalOHash2ᚕgithubᚗcomᚋMichaelMureᚋgitᚑbugᚋrepositoryᚐHashᚄ(ctx, v)
if err != nil {
return it, err
}
+ it.Files = data
}
}
@@ -2228,26 +2262,29 @@ func (ec *executionContext) unmarshalInputOpenBugInput(ctx context.Context, obj
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("clientMutationId"))
- it.ClientMutationID, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.ClientMutationID = data
case "repoRef":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("repoRef"))
- it.RepoRef, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.RepoRef = data
case "prefix":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("prefix"))
- it.Prefix, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Prefix = data
}
}
@@ -2272,34 +2309,38 @@ func (ec *executionContext) unmarshalInputSetTitleInput(ctx context.Context, obj
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("clientMutationId"))
- it.ClientMutationID, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.ClientMutationID = data
case "repoRef":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("repoRef"))
- it.RepoRef, err = ec.unmarshalOString2ᚖstring(ctx, v)
+ data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
+ it.RepoRef = data
case "prefix":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("prefix"))
- it.Prefix, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Prefix = data
case "title":
var err error
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("title"))
- it.Title, err = ec.unmarshalNString2string(ctx, v)
+ data, err := ec.unmarshalNString2string(ctx, v)
if err != nil {
return it, err
}
+ it.Title = data
}
}
@@ -2318,45 +2359,50 @@ var addCommentAndCloseBugPayloadImplementors = []string{"AddCommentAndCloseBugPa
func (ec *executionContext) _AddCommentAndCloseBugPayload(ctx context.Context, sel ast.SelectionSet, obj *models.AddCommentAndCloseBugPayload) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, addCommentAndCloseBugPayloadImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("AddCommentAndCloseBugPayload")
case "clientMutationId":
-
out.Values[i] = ec._AddCommentAndCloseBugPayload_clientMutationId(ctx, field, obj)
-
case "bug":
-
out.Values[i] = ec._AddCommentAndCloseBugPayload_bug(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "commentOperation":
-
out.Values[i] = ec._AddCommentAndCloseBugPayload_commentOperation(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "statusOperation":
-
out.Values[i] = ec._AddCommentAndCloseBugPayload_statusOperation(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2364,45 +2410,50 @@ var addCommentAndReopenBugPayloadImplementors = []string{"AddCommentAndReopenBug
func (ec *executionContext) _AddCommentAndReopenBugPayload(ctx context.Context, sel ast.SelectionSet, obj *models.AddCommentAndReopenBugPayload) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, addCommentAndReopenBugPayloadImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("AddCommentAndReopenBugPayload")
case "clientMutationId":
-
out.Values[i] = ec._AddCommentAndReopenBugPayload_clientMutationId(ctx, field, obj)
-
case "bug":
-
out.Values[i] = ec._AddCommentAndReopenBugPayload_bug(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "commentOperation":
-
out.Values[i] = ec._AddCommentAndReopenBugPayload_commentOperation(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "statusOperation":
-
out.Values[i] = ec._AddCommentAndReopenBugPayload_statusOperation(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2410,38 +2461,45 @@ var addCommentPayloadImplementors = []string{"AddCommentPayload"}
func (ec *executionContext) _AddCommentPayload(ctx context.Context, sel ast.SelectionSet, obj *models.AddCommentPayload) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, addCommentPayloadImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("AddCommentPayload")
case "clientMutationId":
-
out.Values[i] = ec._AddCommentPayload_clientMutationId(ctx, field, obj)
-
case "bug":
-
out.Values[i] = ec._AddCommentPayload_bug(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "operation":
-
out.Values[i] = ec._AddCommentPayload_operation(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2449,45 +2507,50 @@ var changeLabelPayloadImplementors = []string{"ChangeLabelPayload"}
func (ec *executionContext) _ChangeLabelPayload(ctx context.Context, sel ast.SelectionSet, obj *models.ChangeLabelPayload) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, changeLabelPayloadImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("ChangeLabelPayload")
case "clientMutationId":
-
out.Values[i] = ec._ChangeLabelPayload_clientMutationId(ctx, field, obj)
-
case "bug":
-
out.Values[i] = ec._ChangeLabelPayload_bug(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "operation":
-
out.Values[i] = ec._ChangeLabelPayload_operation(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "results":
-
out.Values[i] = ec._ChangeLabelPayload_results(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2495,38 +2558,45 @@ var closeBugPayloadImplementors = []string{"CloseBugPayload"}
func (ec *executionContext) _CloseBugPayload(ctx context.Context, sel ast.SelectionSet, obj *models.CloseBugPayload) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, closeBugPayloadImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("CloseBugPayload")
case "clientMutationId":
-
out.Values[i] = ec._CloseBugPayload_clientMutationId(ctx, field, obj)
-
case "bug":
-
out.Values[i] = ec._CloseBugPayload_bug(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "operation":
-
out.Values[i] = ec._CloseBugPayload_operation(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2534,38 +2604,45 @@ var editCommentPayloadImplementors = []string{"EditCommentPayload"}
func (ec *executionContext) _EditCommentPayload(ctx context.Context, sel ast.SelectionSet, obj *models.EditCommentPayload) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, editCommentPayloadImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("EditCommentPayload")
case "clientMutationId":
-
out.Values[i] = ec._EditCommentPayload_clientMutationId(ctx, field, obj)
-
case "bug":
-
out.Values[i] = ec._EditCommentPayload_bug(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "operation":
-
out.Values[i] = ec._EditCommentPayload_operation(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2573,34 +2650,43 @@ var labelChangeResultImplementors = []string{"LabelChangeResult"}
func (ec *executionContext) _LabelChangeResult(ctx context.Context, sel ast.SelectionSet, obj *bug.LabelChangeResult) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, labelChangeResultImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("LabelChangeResult")
case "label":
-
out.Values[i] = ec._LabelChangeResult_label(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "status":
-
out.Values[i] = ec._LabelChangeResult_status(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2608,38 +2694,45 @@ var newBugPayloadImplementors = []string{"NewBugPayload"}
func (ec *executionContext) _NewBugPayload(ctx context.Context, sel ast.SelectionSet, obj *models.NewBugPayload) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, newBugPayloadImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("NewBugPayload")
case "clientMutationId":
-
out.Values[i] = ec._NewBugPayload_clientMutationId(ctx, field, obj)
-
case "bug":
-
out.Values[i] = ec._NewBugPayload_bug(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "operation":
-
out.Values[i] = ec._NewBugPayload_operation(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2647,38 +2740,45 @@ var openBugPayloadImplementors = []string{"OpenBugPayload"}
func (ec *executionContext) _OpenBugPayload(ctx context.Context, sel ast.SelectionSet, obj *models.OpenBugPayload) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, openBugPayloadImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("OpenBugPayload")
case "clientMutationId":
-
out.Values[i] = ec._OpenBugPayload_clientMutationId(ctx, field, obj)
-
case "bug":
-
out.Values[i] = ec._OpenBugPayload_bug(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "operation":
-
out.Values[i] = ec._OpenBugPayload_operation(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2686,38 +2786,45 @@ var setTitlePayloadImplementors = []string{"SetTitlePayload"}
func (ec *executionContext) _SetTitlePayload(ctx context.Context, sel ast.SelectionSet, obj *models.SetTitlePayload) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, setTitlePayloadImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("SetTitlePayload")
case "clientMutationId":
-
out.Values[i] = ec._SetTitlePayload_clientMutationId(ctx, field, obj)
-
case "bug":
-
out.Values[i] = ec._SetTitlePayload_bug(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "operation":
-
out.Values[i] = ec._SetTitlePayload_operation(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
diff --git a/api/graphql/graph/operations.generated.go b/api/graphql/graph/operations.generated.go
index cc3cd9b7..838f16b0 100644
--- a/api/graphql/graph/operations.generated.go
+++ b/api/graphql/graph/operations.generated.go
@@ -1880,23 +1880,22 @@ var addCommentOperationImplementors = []string{"AddCommentOperation", "Operation
func (ec *executionContext) _AddCommentOperation(ctx context.Context, sel ast.SelectionSet, obj *bug.AddCommentOperation) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, addCommentOperationImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("AddCommentOperation")
case "id":
-
out.Values[i] = ec._AddCommentOperation_id(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -1904,19 +1903,35 @@ func (ec *executionContext) _AddCommentOperation(ctx context.Context, sel ast.Se
}()
res = ec._AddCommentOperation_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "date":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -1924,37 +1939,61 @@ func (ec *executionContext) _AddCommentOperation(ctx context.Context, sel ast.Se
}()
res = ec._AddCommentOperation_date(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "message":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "message":
out.Values[i] = ec._AddCommentOperation_message(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "files":
-
out.Values[i] = ec._AddCommentOperation_files(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -1962,23 +2001,22 @@ var createOperationImplementors = []string{"CreateOperation", "Operation", "Auth
func (ec *executionContext) _CreateOperation(ctx context.Context, sel ast.SelectionSet, obj *bug.CreateOperation) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, createOperationImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("CreateOperation")
case "id":
-
out.Values[i] = ec._CreateOperation_id(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -1986,19 +2024,35 @@ func (ec *executionContext) _CreateOperation(ctx context.Context, sel ast.Select
}()
res = ec._CreateOperation_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "date":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2006,44 +2060,66 @@ func (ec *executionContext) _CreateOperation(ctx context.Context, sel ast.Select
}()
res = ec._CreateOperation_date(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "title":
-
out.Values[i] = ec._CreateOperation_title(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "message":
-
out.Values[i] = ec._CreateOperation_message(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "files":
-
out.Values[i] = ec._CreateOperation_files(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2051,23 +2127,22 @@ var editCommentOperationImplementors = []string{"EditCommentOperation", "Operati
func (ec *executionContext) _EditCommentOperation(ctx context.Context, sel ast.SelectionSet, obj *bug.EditCommentOperation) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, editCommentOperationImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("EditCommentOperation")
case "id":
-
out.Values[i] = ec._EditCommentOperation_id(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2075,19 +2150,35 @@ func (ec *executionContext) _EditCommentOperation(ctx context.Context, sel ast.S
}()
res = ec._EditCommentOperation_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "date":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2095,19 +2186,35 @@ func (ec *executionContext) _EditCommentOperation(ctx context.Context, sel ast.S
}()
res = ec._EditCommentOperation_date(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "target":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2115,37 +2222,61 @@ func (ec *executionContext) _EditCommentOperation(ctx context.Context, sel ast.S
}()
res = ec._EditCommentOperation_target(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "message":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "message":
out.Values[i] = ec._EditCommentOperation_message(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "files":
-
out.Values[i] = ec._EditCommentOperation_files(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2153,23 +2284,22 @@ var labelChangeOperationImplementors = []string{"LabelChangeOperation", "Operati
func (ec *executionContext) _LabelChangeOperation(ctx context.Context, sel ast.SelectionSet, obj *bug.LabelChangeOperation) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, labelChangeOperationImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("LabelChangeOperation")
case "id":
-
out.Values[i] = ec._LabelChangeOperation_id(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2177,19 +2307,35 @@ func (ec *executionContext) _LabelChangeOperation(ctx context.Context, sel ast.S
}()
res = ec._LabelChangeOperation_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "date":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2197,37 +2343,61 @@ func (ec *executionContext) _LabelChangeOperation(ctx context.Context, sel ast.S
}()
res = ec._LabelChangeOperation_date(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "added":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "added":
out.Values[i] = ec._LabelChangeOperation_added(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "removed":
-
out.Values[i] = ec._LabelChangeOperation_removed(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2235,48 +2405,53 @@ var operationConnectionImplementors = []string{"OperationConnection"}
func (ec *executionContext) _OperationConnection(ctx context.Context, sel ast.SelectionSet, obj *models.OperationConnection) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, operationConnectionImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("OperationConnection")
case "edges":
-
out.Values[i] = ec._OperationConnection_edges(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "nodes":
-
out.Values[i] = ec._OperationConnection_nodes(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "pageInfo":
-
out.Values[i] = ec._OperationConnection_pageInfo(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "totalCount":
-
out.Values[i] = ec._OperationConnection_totalCount(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2284,34 +2459,43 @@ var operationEdgeImplementors = []string{"OperationEdge"}
func (ec *executionContext) _OperationEdge(ctx context.Context, sel ast.SelectionSet, obj *models.OperationEdge) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, operationEdgeImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("OperationEdge")
case "cursor":
-
out.Values[i] = ec._OperationEdge_cursor(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "node":
-
out.Values[i] = ec._OperationEdge_node(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2319,23 +2503,22 @@ var setStatusOperationImplementors = []string{"SetStatusOperation", "Operation",
func (ec *executionContext) _SetStatusOperation(ctx context.Context, sel ast.SelectionSet, obj *bug.SetStatusOperation) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, setStatusOperationImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("SetStatusOperation")
case "id":
-
out.Values[i] = ec._SetStatusOperation_id(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2343,19 +2526,35 @@ func (ec *executionContext) _SetStatusOperation(ctx context.Context, sel ast.Sel
}()
res = ec._SetStatusOperation_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "date":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2363,30 +2562,56 @@ func (ec *executionContext) _SetStatusOperation(ctx context.Context, sel ast.Sel
}()
res = ec._SetStatusOperation_date(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "status":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "status":
out.Values[i] = ec._SetStatusOperation_status(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2394,23 +2619,22 @@ var setTitleOperationImplementors = []string{"SetTitleOperation", "Operation", "
func (ec *executionContext) _SetTitleOperation(ctx context.Context, sel ast.SelectionSet, obj *bug.SetTitleOperation) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, setTitleOperationImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("SetTitleOperation")
case "id":
-
out.Values[i] = ec._SetTitleOperation_id(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2418,19 +2642,35 @@ func (ec *executionContext) _SetTitleOperation(ctx context.Context, sel ast.Sele
}()
res = ec._SetTitleOperation_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "date":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2438,37 +2678,61 @@ func (ec *executionContext) _SetTitleOperation(ctx context.Context, sel ast.Sele
}()
res = ec._SetTitleOperation_date(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "title":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "title":
out.Values[i] = ec._SetTitleOperation_title(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "was":
-
out.Values[i] = ec._SetTitleOperation_was(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
diff --git a/api/graphql/graph/prelude.generated.go b/api/graphql/graph/prelude.generated.go
index 3767b0cd..bb1d2c76 100644
--- a/api/graphql/graph/prelude.generated.go
+++ b/api/graphql/graph/prelude.generated.go
@@ -8,6 +8,7 @@ import (
"fmt"
"strconv"
"sync"
+ "sync/atomic"
"github.com/99designs/gqlgen/graphql"
"github.com/99designs/gqlgen/graphql/introspection"
@@ -21,6 +22,30 @@ import (
// region ***************************** args.gotpl *****************************
+func (ec *executionContext) dir_defer_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
+ var err error
+ args := map[string]interface{}{}
+ var arg0 *bool
+ if tmp, ok := rawArgs["if"]; ok {
+ ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("if"))
+ arg0, err = ec.unmarshalOBoolean2ᚖbool(ctx, tmp)
+ if err != nil {
+ return nil, err
+ }
+ }
+ args["if"] = arg0
+ var arg1 *string
+ if tmp, ok := rawArgs["label"]; ok {
+ ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("label"))
+ arg1, err = ec.unmarshalOString2ᚖstring(ctx, tmp)
+ if err != nil {
+ return nil, err
+ }
+ }
+ args["label"] = arg1
+ return args, nil
+}
+
func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
@@ -1480,7 +1505,7 @@ func (ec *executionContext) fieldContext___Type_fields(ctx context.Context, fiel
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field___Type_fields_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -1668,7 +1693,7 @@ func (ec *executionContext) fieldContext___Type_enumValues(ctx context.Context,
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field___Type_enumValues_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -1844,52 +1869,55 @@ var __DirectiveImplementors = []string{"__Directive"}
func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionSet, obj *introspection.Directive) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __DirectiveImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Directive")
case "name":
-
out.Values[i] = ec.___Directive_name(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "description":
-
out.Values[i] = ec.___Directive_description(ctx, field, obj)
-
case "locations":
-
out.Values[i] = ec.___Directive_locations(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "args":
-
out.Values[i] = ec.___Directive_args(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "isRepeatable":
-
out.Values[i] = ec.___Directive_isRepeatable(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -1897,42 +1925,47 @@ var __EnumValueImplementors = []string{"__EnumValue"}
func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.EnumValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __EnumValueImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__EnumValue")
case "name":
-
out.Values[i] = ec.___EnumValue_name(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "description":
-
out.Values[i] = ec.___EnumValue_description(ctx, field, obj)
-
case "isDeprecated":
-
out.Values[i] = ec.___EnumValue_isDeprecated(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "deprecationReason":
-
out.Values[i] = ec.___EnumValue_deprecationReason(ctx, field, obj)
-
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -1940,56 +1973,57 @@ var __FieldImplementors = []string{"__Field"}
func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, obj *introspection.Field) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __FieldImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Field")
case "name":
-
out.Values[i] = ec.___Field_name(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "description":
-
out.Values[i] = ec.___Field_description(ctx, field, obj)
-
case "args":
-
out.Values[i] = ec.___Field_args(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "type":
-
out.Values[i] = ec.___Field_type(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "isDeprecated":
-
out.Values[i] = ec.___Field_isDeprecated(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "deprecationReason":
-
out.Values[i] = ec.___Field_deprecationReason(ctx, field, obj)
-
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -1997,42 +2031,47 @@ var __InputValueImplementors = []string{"__InputValue"}
func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.InputValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __InputValueImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__InputValue")
case "name":
-
out.Values[i] = ec.___InputValue_name(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "description":
-
out.Values[i] = ec.___InputValue_description(ctx, field, obj)
-
case "type":
-
out.Values[i] = ec.___InputValue_type(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "defaultValue":
-
out.Values[i] = ec.___InputValue_defaultValue(ctx, field, obj)
-
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2040,53 +2079,54 @@ var __SchemaImplementors = []string{"__Schema"}
func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, obj *introspection.Schema) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __SchemaImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Schema")
case "description":
-
out.Values[i] = ec.___Schema_description(ctx, field, obj)
-
case "types":
-
out.Values[i] = ec.___Schema_types(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "queryType":
-
out.Values[i] = ec.___Schema_queryType(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "mutationType":
-
out.Values[i] = ec.___Schema_mutationType(ctx, field, obj)
-
case "subscriptionType":
-
out.Values[i] = ec.___Schema_subscriptionType(ctx, field, obj)
-
case "directives":
-
out.Values[i] = ec.___Schema_directives(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2094,63 +2134,56 @@ var __TypeImplementors = []string{"__Type"}
func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, obj *introspection.Type) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __TypeImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Type")
case "kind":
-
out.Values[i] = ec.___Type_kind(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "name":
-
out.Values[i] = ec.___Type_name(ctx, field, obj)
-
case "description":
-
out.Values[i] = ec.___Type_description(ctx, field, obj)
-
case "fields":
-
out.Values[i] = ec.___Type_fields(ctx, field, obj)
-
case "interfaces":
-
out.Values[i] = ec.___Type_interfaces(ctx, field, obj)
-
case "possibleTypes":
-
out.Values[i] = ec.___Type_possibleTypes(ctx, field, obj)
-
case "enumValues":
-
out.Values[i] = ec.___Type_enumValues(ctx, field, obj)
-
case "inputFields":
-
out.Values[i] = ec.___Type_inputFields(ctx, field, obj)
-
case "ofType":
-
out.Values[i] = ec.___Type_ofType(ctx, field, obj)
-
case "specifiedByURL":
-
out.Values[i] = ec.___Type_specifiedByURL(ctx, field, obj)
-
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
diff --git a/api/graphql/graph/repository.generated.go b/api/graphql/graph/repository.generated.go
index 48ae4d89..c72c6e45 100644
--- a/api/graphql/graph/repository.generated.go
+++ b/api/graphql/graph/repository.generated.go
@@ -304,7 +304,7 @@ func (ec *executionContext) fieldContext_Repository_allBugs(ctx context.Context,
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Repository_allBugs_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -384,7 +384,7 @@ func (ec *executionContext) fieldContext_Repository_bug(ctx context.Context, fie
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Repository_bug_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -449,7 +449,7 @@ func (ec *executionContext) fieldContext_Repository_allIdentities(ctx context.Co
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Repository_allIdentities_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -519,7 +519,7 @@ func (ec *executionContext) fieldContext_Repository_identity(ctx context.Context
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Repository_identity_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -643,7 +643,7 @@ func (ec *executionContext) fieldContext_Repository_validLabels(ctx context.Cont
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Repository_validLabels_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -664,8 +664,9 @@ var repositoryImplementors = []string{"Repository"}
func (ec *executionContext) _Repository(ctx context.Context, sel ast.SelectionSet, obj *models.Repository) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, repositoryImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
@@ -673,7 +674,7 @@ func (ec *executionContext) _Repository(ctx context.Context, sel ast.SelectionSe
case "name":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -683,14 +684,30 @@ func (ec *executionContext) _Repository(ctx context.Context, sel ast.SelectionSe
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "allBugs":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -698,19 +715,35 @@ func (ec *executionContext) _Repository(ctx context.Context, sel ast.SelectionSe
}()
res = ec._Repository_allBugs(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "bug":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -720,14 +753,30 @@ func (ec *executionContext) _Repository(ctx context.Context, sel ast.SelectionSe
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "allIdentities":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -735,19 +784,35 @@ func (ec *executionContext) _Repository(ctx context.Context, sel ast.SelectionSe
}()
res = ec._Repository_allIdentities(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "identity":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -757,14 +822,30 @@ func (ec *executionContext) _Repository(ctx context.Context, sel ast.SelectionSe
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "userIdentity":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -774,14 +855,30 @@ func (ec *executionContext) _Repository(ctx context.Context, sel ast.SelectionSe
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "validLabels":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -789,23 +886,51 @@ func (ec *executionContext) _Repository(ctx context.Context, sel ast.SelectionSe
}()
res = ec._Repository_validLabels(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
diff --git a/api/graphql/graph/root.generated.go b/api/graphql/graph/root.generated.go
index ae506b73..61357c74 100644
--- a/api/graphql/graph/root.generated.go
+++ b/api/graphql/graph/root.generated.go
@@ -6,6 +6,7 @@ import (
"context"
"fmt"
"strconv"
+ "sync/atomic"
"github.com/99designs/gqlgen/graphql"
"github.com/99designs/gqlgen/graphql/introspection"
@@ -265,7 +266,7 @@ func (ec *executionContext) fieldContext_Mutation_newBug(ctx context.Context, fi
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Mutation_newBug_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -328,7 +329,7 @@ func (ec *executionContext) fieldContext_Mutation_addComment(ctx context.Context
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Mutation_addComment_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -393,7 +394,7 @@ func (ec *executionContext) fieldContext_Mutation_addCommentAndClose(ctx context
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Mutation_addCommentAndClose_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -458,7 +459,7 @@ func (ec *executionContext) fieldContext_Mutation_addCommentAndReopen(ctx contex
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Mutation_addCommentAndReopen_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -521,7 +522,7 @@ func (ec *executionContext) fieldContext_Mutation_editComment(ctx context.Contex
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Mutation_editComment_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -586,7 +587,7 @@ func (ec *executionContext) fieldContext_Mutation_changeLabels(ctx context.Conte
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Mutation_changeLabels_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -649,7 +650,7 @@ func (ec *executionContext) fieldContext_Mutation_openBug(ctx context.Context, f
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Mutation_openBug_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -712,7 +713,7 @@ func (ec *executionContext) fieldContext_Mutation_closeBug(ctx context.Context,
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Mutation_closeBug_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -775,7 +776,7 @@ func (ec *executionContext) fieldContext_Mutation_setTitle(ctx context.Context,
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Mutation_setTitle_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -843,7 +844,7 @@ func (ec *executionContext) fieldContext_Query_repository(ctx context.Context, f
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Query_repository_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -917,7 +918,7 @@ func (ec *executionContext) fieldContext_Query___type(ctx context.Context, field
ctx = graphql.WithFieldContext(ctx, fc)
if fc.Args, err = ec.field_Query___type_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ec.Error(ctx, err)
- return
+ return fc, err
}
return fc, nil
}
@@ -998,7 +999,7 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet)
})
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
innerCtx := graphql.WithRootFieldContext(ctx, &graphql.RootFieldContext{
Object: field.Name,
@@ -1009,94 +1010,88 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet)
case "__typename":
out.Values[i] = graphql.MarshalString("Mutation")
case "newBug":
-
out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
return ec._Mutation_newBug(ctx, field)
})
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "addComment":
-
out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
return ec._Mutation_addComment(ctx, field)
})
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "addCommentAndClose":
-
out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
return ec._Mutation_addCommentAndClose(ctx, field)
})
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "addCommentAndReopen":
-
out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
return ec._Mutation_addCommentAndReopen(ctx, field)
})
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "editComment":
-
out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
return ec._Mutation_editComment(ctx, field)
})
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "changeLabels":
-
out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
return ec._Mutation_changeLabels(ctx, field)
})
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "openBug":
-
out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
return ec._Mutation_openBug(ctx, field)
})
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "closeBug":
-
out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
return ec._Mutation_closeBug(ctx, field)
})
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "setTitle":
-
out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
return ec._Mutation_setTitle(ctx, field)
})
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -1109,7 +1104,7 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr
})
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
innerCtx := graphql.WithRootFieldContext(ctx, &graphql.RootFieldContext{
Object: field.Name,
@@ -1122,7 +1117,7 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr
case "repository":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -1133,32 +1128,39 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr
}
rrm := func(ctx context.Context) graphql.Marshaler {
- return ec.OperationContext.RootResolverMiddleware(ctx, innerFunc)
+ return ec.OperationContext.RootResolverMiddleware(ctx,
+ func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
}
- out.Concurrently(i, func() graphql.Marshaler {
- return rrm(innerCtx)
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return rrm(innerCtx) })
case "__type":
-
out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
return ec._Query___type(ctx, field)
})
-
case "__schema":
-
out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
return ec._Query___schema(ctx, field)
})
-
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
diff --git a/api/graphql/graph/root_.generated.go b/api/graphql/graph/root_.generated.go
index a1434228..85e447b3 100644
--- a/api/graphql/graph/root_.generated.go
+++ b/api/graphql/graph/root_.generated.go
@@ -6,6 +6,7 @@ import (
"bytes"
"context"
"errors"
+ "sync/atomic"
"github.com/99designs/gqlgen/graphql"
"github.com/99designs/gqlgen/graphql/introspection"
@@ -381,7 +382,7 @@ func (e *executableSchema) Schema() *ast.Schema {
}
func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) {
- ec := executionContext{nil, e}
+ ec := executionContext{nil, e, 0, 0, nil}
_ = ec
switch typeName + "." + field {
@@ -1779,7 +1780,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
rc := graphql.GetOperationContext(ctx)
- ec := executionContext{rc, e}
+ ec := executionContext{rc, e, 0, 0, make(chan graphql.DeferredResult)}
inputUnmarshalMap := graphql.BuildUnmarshalerMap(
ec.unmarshalInputAddCommentAndCloseBugInput,
ec.unmarshalInputAddCommentAndReopenBugInput,
@@ -1796,18 +1797,33 @@ func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
switch rc.Operation.Operation {
case ast.Query:
return func(ctx context.Context) *graphql.Response {
- if !first {
- return nil
+ var response graphql.Response
+ var data graphql.Marshaler
+ if first {
+ first = false
+ ctx = graphql.WithUnmarshalerMap(ctx, inputUnmarshalMap)
+ data = ec._Query(ctx, rc.Operation.SelectionSet)
+ } else {
+ if atomic.LoadInt32(&ec.pendingDeferred) > 0 {
+ result := <-ec.deferredResults
+ atomic.AddInt32(&ec.pendingDeferred, -1)
+ data = result.Result
+ response.Path = result.Path
+ response.Label = result.Label
+ response.Errors = result.Errors
+ } else {
+ return nil
+ }
}
- first = false
- ctx = graphql.WithUnmarshalerMap(ctx, inputUnmarshalMap)
- data := ec._Query(ctx, rc.Operation.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
-
- return &graphql.Response{
- Data: buf.Bytes(),
+ response.Data = buf.Bytes()
+ if atomic.LoadInt32(&ec.deferred) > 0 {
+ hasNext := atomic.LoadInt32(&ec.pendingDeferred) > 0
+ response.HasNext = &hasNext
}
+
+ return &response
}
case ast.Mutation:
return func(ctx context.Context) *graphql.Response {
@@ -1833,6 +1849,28 @@ func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
type executionContext struct {
*graphql.OperationContext
*executableSchema
+ deferred int32
+ pendingDeferred int32
+ deferredResults chan graphql.DeferredResult
+}
+
+func (ec *executionContext) processDeferredGroup(dg graphql.DeferredGroup) {
+ atomic.AddInt32(&ec.pendingDeferred, 1)
+ go func() {
+ ctx := graphql.WithFreshResponseContext(dg.Context)
+ dg.FieldSet.Dispatch(ctx)
+ ds := graphql.DeferredResult{
+ Path: dg.Path,
+ Label: dg.Label,
+ Result: dg.FieldSet,
+ Errors: graphql.GetErrors(ctx),
+ }
+ // null fields should bubble up
+ if dg.FieldSet.Invalids > 0 {
+ ds.Result = graphql.Null
+ }
+ ec.deferredResults <- ds
+ }()
}
func (ec *executionContext) introspectSchema() (*introspection.Schema, error) {
diff --git a/api/graphql/graph/timeline.generated.go b/api/graphql/graph/timeline.generated.go
index 4833e274..f0c4b06d 100644
--- a/api/graphql/graph/timeline.generated.go
+++ b/api/graphql/graph/timeline.generated.go
@@ -2013,8 +2013,9 @@ var addCommentTimelineItemImplementors = []string{"AddCommentTimelineItem", "Tim
func (ec *executionContext) _AddCommentTimelineItem(ctx context.Context, sel ast.SelectionSet, obj *bug.AddCommentTimelineItem) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, addCommentTimelineItemImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
@@ -2022,7 +2023,7 @@ func (ec *executionContext) _AddCommentTimelineItem(ctx context.Context, sel ast
case "id":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2030,19 +2031,35 @@ func (ec *executionContext) _AddCommentTimelineItem(ctx context.Context, sel ast
}()
res = ec._AddCommentTimelineItem_id(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2050,40 +2067,50 @@ func (ec *executionContext) _AddCommentTimelineItem(ctx context.Context, sel ast
}()
res = ec._AddCommentTimelineItem_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "message":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "message":
out.Values[i] = ec._AddCommentTimelineItem_message(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "messageIsEmpty":
-
out.Values[i] = ec._AddCommentTimelineItem_messageIsEmpty(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "files":
-
out.Values[i] = ec._AddCommentTimelineItem_files(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "createdAt":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2091,19 +2118,35 @@ func (ec *executionContext) _AddCommentTimelineItem(ctx context.Context, sel ast
}()
res = ec._AddCommentTimelineItem_createdAt(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "lastEdit":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2111,37 +2154,61 @@ func (ec *executionContext) _AddCommentTimelineItem(ctx context.Context, sel ast
}()
res = ec._AddCommentTimelineItem_lastEdit(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "edited":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "edited":
out.Values[i] = ec._AddCommentTimelineItem_edited(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "history":
-
out.Values[i] = ec._AddCommentTimelineItem_history(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2149,23 +2216,22 @@ var commentHistoryStepImplementors = []string{"CommentHistoryStep"}
func (ec *executionContext) _CommentHistoryStep(ctx context.Context, sel ast.SelectionSet, obj *bug.CommentHistoryStep) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, commentHistoryStepImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("CommentHistoryStep")
case "message":
-
out.Values[i] = ec._CommentHistoryStep_message(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "date":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2173,23 +2239,51 @@ func (ec *executionContext) _CommentHistoryStep(ctx context.Context, sel ast.Sel
}()
res = ec._CommentHistoryStep_date(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2197,8 +2291,9 @@ var createTimelineItemImplementors = []string{"CreateTimelineItem", "TimelineIte
func (ec *executionContext) _CreateTimelineItem(ctx context.Context, sel ast.SelectionSet, obj *bug.CreateTimelineItem) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, createTimelineItemImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
@@ -2206,7 +2301,7 @@ func (ec *executionContext) _CreateTimelineItem(ctx context.Context, sel ast.Sel
case "id":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2214,19 +2309,35 @@ func (ec *executionContext) _CreateTimelineItem(ctx context.Context, sel ast.Sel
}()
res = ec._CreateTimelineItem_id(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2234,40 +2345,50 @@ func (ec *executionContext) _CreateTimelineItem(ctx context.Context, sel ast.Sel
}()
res = ec._CreateTimelineItem_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "message":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "message":
out.Values[i] = ec._CreateTimelineItem_message(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "messageIsEmpty":
-
out.Values[i] = ec._CreateTimelineItem_messageIsEmpty(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "files":
-
out.Values[i] = ec._CreateTimelineItem_files(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "createdAt":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2275,19 +2396,35 @@ func (ec *executionContext) _CreateTimelineItem(ctx context.Context, sel ast.Sel
}()
res = ec._CreateTimelineItem_createdAt(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "lastEdit":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2295,37 +2432,61 @@ func (ec *executionContext) _CreateTimelineItem(ctx context.Context, sel ast.Sel
}()
res = ec._CreateTimelineItem_lastEdit(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "edited":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "edited":
out.Values[i] = ec._CreateTimelineItem_edited(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "history":
-
out.Values[i] = ec._CreateTimelineItem_history(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2333,8 +2494,9 @@ var labelChangeTimelineItemImplementors = []string{"LabelChangeTimelineItem", "T
func (ec *executionContext) _LabelChangeTimelineItem(ctx context.Context, sel ast.SelectionSet, obj *bug.LabelChangeTimelineItem) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, labelChangeTimelineItemImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
@@ -2342,7 +2504,7 @@ func (ec *executionContext) _LabelChangeTimelineItem(ctx context.Context, sel as
case "id":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2350,19 +2512,35 @@ func (ec *executionContext) _LabelChangeTimelineItem(ctx context.Context, sel as
}()
res = ec._LabelChangeTimelineItem_id(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2370,19 +2548,35 @@ func (ec *executionContext) _LabelChangeTimelineItem(ctx context.Context, sel as
}()
res = ec._LabelChangeTimelineItem_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "date":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2390,37 +2584,61 @@ func (ec *executionContext) _LabelChangeTimelineItem(ctx context.Context, sel as
}()
res = ec._LabelChangeTimelineItem_date(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "added":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "added":
out.Values[i] = ec._LabelChangeTimelineItem_added(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "removed":
-
out.Values[i] = ec._LabelChangeTimelineItem_removed(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2428,8 +2646,9 @@ var setStatusTimelineItemImplementors = []string{"SetStatusTimelineItem", "Timel
func (ec *executionContext) _SetStatusTimelineItem(ctx context.Context, sel ast.SelectionSet, obj *bug.SetStatusTimelineItem) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, setStatusTimelineItemImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
@@ -2437,7 +2656,7 @@ func (ec *executionContext) _SetStatusTimelineItem(ctx context.Context, sel ast.
case "id":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2445,19 +2664,35 @@ func (ec *executionContext) _SetStatusTimelineItem(ctx context.Context, sel ast.
}()
res = ec._SetStatusTimelineItem_id(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2465,19 +2700,35 @@ func (ec *executionContext) _SetStatusTimelineItem(ctx context.Context, sel ast.
}()
res = ec._SetStatusTimelineItem_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "date":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2485,30 +2736,56 @@ func (ec *executionContext) _SetStatusTimelineItem(ctx context.Context, sel ast.
}()
res = ec._SetStatusTimelineItem_date(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "status":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "status":
out.Values[i] = ec._SetStatusTimelineItem_status(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2516,8 +2793,9 @@ var setTitleTimelineItemImplementors = []string{"SetTitleTimelineItem", "Timelin
func (ec *executionContext) _SetTitleTimelineItem(ctx context.Context, sel ast.SelectionSet, obj *bug.SetTitleTimelineItem) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, setTitleTimelineItemImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
@@ -2525,7 +2803,7 @@ func (ec *executionContext) _SetTitleTimelineItem(ctx context.Context, sel ast.S
case "id":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2533,19 +2811,35 @@ func (ec *executionContext) _SetTitleTimelineItem(ctx context.Context, sel ast.S
}()
res = ec._SetTitleTimelineItem_id(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "author":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2553,19 +2847,35 @@ func (ec *executionContext) _SetTitleTimelineItem(ctx context.Context, sel ast.S
}()
res = ec._SetTitleTimelineItem_author(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "date":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -2573,37 +2883,61 @@ func (ec *executionContext) _SetTitleTimelineItem(ctx context.Context, sel ast.S
}()
res = ec._SetTitleTimelineItem_date(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
- })
- case "title":
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
+ case "title":
out.Values[i] = ec._SetTitleTimelineItem_title(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
case "was":
-
out.Values[i] = ec._SetTitleTimelineItem_was(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&out.Invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2611,48 +2945,53 @@ var timelineItemConnectionImplementors = []string{"TimelineItemConnection"}
func (ec *executionContext) _TimelineItemConnection(ctx context.Context, sel ast.SelectionSet, obj *models.TimelineItemConnection) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, timelineItemConnectionImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("TimelineItemConnection")
case "edges":
-
out.Values[i] = ec._TimelineItemConnection_edges(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "nodes":
-
out.Values[i] = ec._TimelineItemConnection_nodes(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "pageInfo":
-
out.Values[i] = ec._TimelineItemConnection_pageInfo(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "totalCount":
-
out.Values[i] = ec._TimelineItemConnection_totalCount(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -2660,34 +2999,43 @@ var timelineItemEdgeImplementors = []string{"TimelineItemEdge"}
func (ec *executionContext) _TimelineItemEdge(ctx context.Context, sel ast.SelectionSet, obj *models.TimelineItemEdge) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, timelineItemEdgeImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("TimelineItemEdge")
case "cursor":
-
out.Values[i] = ec._TimelineItemEdge_cursor(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "node":
-
out.Values[i] = ec._TimelineItemEdge_node(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
diff --git a/api/graphql/graph/types.generated.go b/api/graphql/graph/types.generated.go
index b75604ab..7326d929 100644
--- a/api/graphql/graph/types.generated.go
+++ b/api/graphql/graph/types.generated.go
@@ -439,8 +439,9 @@ var colorImplementors = []string{"Color"}
func (ec *executionContext) _Color(ctx context.Context, sel ast.SelectionSet, obj *color.RGBA) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, colorImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
@@ -448,7 +449,7 @@ func (ec *executionContext) _Color(ctx context.Context, sel ast.SelectionSet, ob
case "R":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -456,19 +457,35 @@ func (ec *executionContext) _Color(ctx context.Context, sel ast.SelectionSet, ob
}()
res = ec._Color_R(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "G":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -476,19 +493,35 @@ func (ec *executionContext) _Color(ctx context.Context, sel ast.SelectionSet, ob
}()
res = ec._Color_G(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "B":
field := field
- innerFunc := func(ctx context.Context) (res graphql.Marshaler) {
+ innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
@@ -496,23 +529,51 @@ func (ec *executionContext) _Color(ctx context.Context, sel ast.SelectionSet, ob
}()
res = ec._Color_B(ctx, field, obj)
if res == graphql.Null {
- atomic.AddUint32(&invalids, 1)
+ atomic.AddUint32(&fs.Invalids, 1)
}
return res
}
- out.Concurrently(i, func() graphql.Marshaler {
- return innerFunc(ctx)
+ if field.Deferrable != nil {
+ dfs, ok := deferred[field.Deferrable.Label]
+ di := 0
+ if ok {
+ dfs.AddField(field)
+ di = len(dfs.Values) - 1
+ } else {
+ dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
+ deferred[field.Deferrable.Label] = dfs
+ }
+ dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
+ return innerFunc(ctx, dfs)
+ })
+
+ // don't run the out.Concurrently() call below
+ out.Values[i] = graphql.Null
+ continue
+ }
- })
+ out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
@@ -520,48 +581,53 @@ var pageInfoImplementors = []string{"PageInfo"}
func (ec *executionContext) _PageInfo(ctx context.Context, sel ast.SelectionSet, obj *models.PageInfo) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, pageInfoImplementors)
+
out := graphql.NewFieldSet(fields)
- var invalids uint32
+ deferred := make(map[string]*graphql.FieldSet)
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("PageInfo")
case "hasNextPage":
-
out.Values[i] = ec._PageInfo_hasNextPage(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "hasPreviousPage":
-
out.Values[i] = ec._PageInfo_hasPreviousPage(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "startCursor":
-
out.Values[i] = ec._PageInfo_startCursor(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
case "endCursor":
-
out.Values[i] = ec._PageInfo_endCursor(ctx, field, obj)
-
if out.Values[i] == graphql.Null {
- invalids++
+ out.Invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
- out.Dispatch()
- if invalids > 0 {
+ out.Dispatch(ctx)
+ if out.Invalids > 0 {
return graphql.Null
}
+
+ atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+ for label, dfs := range deferred {
+ ec.processDeferredGroup(graphql.DeferredGroup{
+ Label: label,
+ Path: graphql.GetPath(ctx),
+ FieldSet: dfs,
+ Context: ctx,
+ })
+ }
+
return out
}
diff --git a/api/graphql/models/gen_models.go b/api/graphql/models/gen_models.go
index d75b3d27..000f4a10 100644
--- a/api/graphql/models/gen_models.go
+++ b/api/graphql/models/gen_models.go
@@ -15,20 +15,20 @@ type Authored interface {
type AddCommentAndCloseBugInput struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The name of the repository. If not set, the default repository is used.
- RepoRef *string `json:"repoRef"`
+ RepoRef *string `json:"repoRef,omitempty"`
// The bug ID's prefix.
Prefix string `json:"prefix"`
// The message to be added to the bug.
Message string `json:"message"`
// The collection of file's hash required for the first message.
- Files []repository.Hash `json:"files"`
+ Files []repository.Hash `json:"files,omitempty"`
}
type AddCommentAndCloseBugPayload struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The affected bug.
Bug BugWrapper `json:"bug"`
// The resulting AddComment operation.
@@ -39,20 +39,20 @@ type AddCommentAndCloseBugPayload struct {
type AddCommentAndReopenBugInput struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The name of the repository. If not set, the default repository is used.
- RepoRef *string `json:"repoRef"`
+ RepoRef *string `json:"repoRef,omitempty"`
// The bug ID's prefix.
Prefix string `json:"prefix"`
// The message to be added to the bug.
Message string `json:"message"`
// The collection of file's hash required for the first message.
- Files []repository.Hash `json:"files"`
+ Files []repository.Hash `json:"files,omitempty"`
}
type AddCommentAndReopenBugPayload struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The affected bug.
Bug BugWrapper `json:"bug"`
// The resulting AddComment operation.
@@ -63,20 +63,20 @@ type AddCommentAndReopenBugPayload struct {
type AddCommentInput struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The name of the repository. If not set, the default repository is used.
- RepoRef *string `json:"repoRef"`
+ RepoRef *string `json:"repoRef,omitempty"`
// The bug ID's prefix.
Prefix string `json:"prefix"`
// The message to be added to the bug.
Message string `json:"message"`
// The collection of file's hash required for the first message.
- Files []repository.Hash `json:"files"`
+ Files []repository.Hash `json:"files,omitempty"`
}
type AddCommentPayload struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The affected bug.
Bug BugWrapper `json:"bug"`
// The resulting operation.
@@ -104,20 +104,20 @@ type BugEdge struct {
type ChangeLabelInput struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The name of the repository. If not set, the default repository is used.
- RepoRef *string `json:"repoRef"`
+ RepoRef *string `json:"repoRef,omitempty"`
// The bug ID's prefix.
Prefix string `json:"prefix"`
// The list of label to add.
- Added []string `json:"added"`
+ Added []string `json:"added,omitempty"`
// The list of label to remove.
- Removed []string `json:"Removed"`
+ Removed []string `json:"Removed,omitempty"`
}
type ChangeLabelPayload struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The affected bug.
Bug BugWrapper `json:"bug"`
// The resulting operation.
@@ -128,16 +128,16 @@ type ChangeLabelPayload struct {
type CloseBugInput struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The name of the repository. If not set, the default repository is used.
- RepoRef *string `json:"repoRef"`
+ RepoRef *string `json:"repoRef,omitempty"`
// The bug ID's prefix.
Prefix string `json:"prefix"`
}
type CloseBugPayload struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The affected bug.
Bug BugWrapper `json:"bug"`
// The resulting operation.
@@ -158,20 +158,20 @@ type CommentEdge struct {
type EditCommentInput struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The name of the repository. If not set, the default repository is used.
- RepoRef *string `json:"repoRef"`
+ RepoRef *string `json:"repoRef,omitempty"`
// A prefix of the CombinedId of the comment to be changed.
TargetPrefix string `json:"targetPrefix"`
// The new message to be set.
Message string `json:"message"`
// The collection of file's hash required for the first message.
- Files []repository.Hash `json:"files"`
+ Files []repository.Hash `json:"files,omitempty"`
}
type EditCommentPayload struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The affected bug.
Bug BugWrapper `json:"bug"`
// The resulting operation.
@@ -204,20 +204,20 @@ type LabelEdge struct {
type NewBugInput struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The name of the repository. If not set, the default repository is used.
- RepoRef *string `json:"repoRef"`
+ RepoRef *string `json:"repoRef,omitempty"`
// The title of the new bug.
Title string `json:"title"`
// The first message of the new bug.
Message string `json:"message"`
// The collection of file's hash required for the first message.
- Files []repository.Hash `json:"files"`
+ Files []repository.Hash `json:"files,omitempty"`
}
type NewBugPayload struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The created bug.
Bug BugWrapper `json:"bug"`
// The resulting operation.
@@ -226,16 +226,16 @@ type NewBugPayload struct {
type OpenBugInput struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The name of the repository. If not set, the default repository is used.
- RepoRef *string `json:"repoRef"`
+ RepoRef *string `json:"repoRef,omitempty"`
// The bug ID's prefix.
Prefix string `json:"prefix"`
}
type OpenBugPayload struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The affected bug.
Bug BugWrapper `json:"bug"`
// The resulting operation.
@@ -270,9 +270,9 @@ type PageInfo struct {
type SetTitleInput struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The name of the repository. If not set, the default repository is used.
- RepoRef *string `json:"repoRef"`
+ RepoRef *string `json:"repoRef,omitempty"`
// The bug ID's prefix.
Prefix string `json:"prefix"`
// The new title.
@@ -281,7 +281,7 @@ type SetTitleInput struct {
type SetTitlePayload struct {
// A unique identifier for the client performing the mutation.
- ClientMutationID *string `json:"clientMutationId"`
+ ClientMutationID *string `json:"clientMutationId,omitempty"`
// The affected bug.
Bug BugWrapper `json:"bug"`
// The resulting operation
diff --git a/entities/identity/key.go b/entities/identity/key.go
index 87271dd5..5ded31fa 100644
--- a/entities/identity/key.go
+++ b/entities/identity/key.go
@@ -217,18 +217,15 @@ func (k *Key) storePrivate(repo repository.RepoKeyring) error {
}
func (k *Key) PGPEntity() *openpgp.Entity {
- uid := packet.NewUserId("", "", "")
- return &openpgp.Entity{
+ e := &openpgp.Entity{
PrimaryKey: k.public,
PrivateKey: k.private,
- Identities: map[string]*openpgp.Identity{
- uid.Id: {
- Name: uid.Id,
- UserId: uid,
- SelfSignature: &packet.Signature{
- IsPrimaryId: func() *bool { b := true; return &b }(),
- },
- },
- },
+ Identities: map[string]*openpgp.Identity{},
+ }
+ // somehow initialize the proper fields with identity, self-signature ...
+ err := e.AddUserId("name", "", "", nil)
+ if err != nil {
+ panic(err)
}
+ return e
}
diff --git a/entity/dag/common_test.go b/entity/dag/common_test.go
index 51acfa49..4c7b59f0 100644
--- a/entity/dag/common_test.go
+++ b/entity/dag/common_test.go
@@ -109,6 +109,12 @@ func makeTestContext() (repository.ClockedRepo, identity.Interface, identity.Int
return repo, id1, id2, resolvers, def
}
+func makeTestContextGoGit(t *testing.T) (repository.ClockedRepo, identity.Interface, identity.Interface, entity.Resolvers, Definition) {
+ repo := repository.CreateGoGitTestRepo(t, false)
+ id1, id2, resolvers, def := makeTestContextInternal(repo)
+ return repo, id1, id2, resolvers, def
+}
+
func makeTestContextRemote(t *testing.T) (repository.ClockedRepo, repository.ClockedRepo, repository.ClockedRepo, identity.Interface, identity.Interface, entity.Resolvers, Definition) {
repoA := repository.CreateGoGitTestRepo(t, false)
repoB := repository.CreateGoGitTestRepo(t, false)
diff --git a/entity/dag/operation_pack.go b/entity/dag/operation_pack.go
index c999ff23..3a871c12 100644
--- a/entity/dag/operation_pack.go
+++ b/entity/dag/operation_pack.go
@@ -7,7 +7,6 @@ import (
"strings"
"github.com/ProtonMail/go-crypto/openpgp"
- "github.com/ProtonMail/go-crypto/openpgp/packet"
"github.com/pkg/errors"
"github.com/MichaelMure/git-bug/entities/identity"
@@ -23,7 +22,7 @@ const createClockEntryPrefix = "create-clock-"
const editClockEntryPrefix = "edit-clock-"
// operationPack is a wrapper structure to store multiple operations in a single git blob.
-// Additionally, it holds and store the metadata for those operations.
+// Additionally, it holds and stores the metadata for those operations.
type operationPack struct {
// An identifier, taken from a hash of the serialized Operations.
id entity.Id
@@ -272,7 +271,12 @@ func readOperationPack(def Definition, repo repository.RepoData, resolvers entit
// Verify signature if we expect one
keys := author.ValidKeysAtTime(fmt.Sprintf(editClockPattern, def.Namespace), editTime)
if len(keys) > 0 {
- keyring := PGPKeyring(keys)
+ // this is a *very* convoluted and inefficient way to make OpenPGP accept to check a signature, but anything
+ // else goes against the grain and make it very unhappy.
+ keyring := openpgp.EntityList{}
+ for _, key := range keys {
+ keyring = append(keyring, key.PGPEntity())
+ }
_, err = openpgp.CheckDetachedSignature(keyring, commit.SignedData, commit.Signature, nil)
if err != nil {
return nil, fmt.Errorf("signature failure: %v", err)
@@ -360,48 +364,3 @@ func unmarshallPack(def Definition, resolvers entity.Resolvers, data []byte) ([]
return ops, author, nil
}
-
-var _ openpgp.KeyRing = &PGPKeyring{}
-
-// PGPKeyring implement a openpgp.KeyRing from an slice of Key
-type PGPKeyring []*identity.Key
-
-func (pk PGPKeyring) KeysById(id uint64) []openpgp.Key {
- var result []openpgp.Key
- for _, key := range pk {
- if key.Public().KeyId == id {
- result = append(result, openpgp.Key{
- PublicKey: key.Public(),
- PrivateKey: key.Private(),
- Entity: &openpgp.Entity{
- PrimaryKey: key.Public(),
- PrivateKey: key.Private(),
- Identities: map[string]*openpgp.Identity{
- "": {},
- },
- },
- SelfSignature: &packet.Signature{
- IsPrimaryId: func() *bool { b := true; return &b }(),
- },
- })
- }
- }
- return result
-}
-
-func (pk PGPKeyring) KeysByIdUsage(id uint64, requiredUsage byte) []openpgp.Key {
- // the only usage we care about is the ability to sign, which all keys should already be capable of
- return pk.KeysById(id)
-}
-
-func (pk PGPKeyring) DecryptionKeys() []openpgp.Key {
- // result := make([]openpgp.Key, len(pk))
- // for i, key := range pk {
- // result[i] = openpgp.Key{
- // PublicKey: key.Public(),
- // PrivateKey: key.Private(),
- // }
- // }
- // return result
- panic("not implemented")
-}
diff --git a/entity/dag/operation_pack_test.go b/entity/dag/operation_pack_test.go
index bd8e8e03..09e60caf 100644
--- a/entity/dag/operation_pack_test.go
+++ b/entity/dag/operation_pack_test.go
@@ -7,6 +7,7 @@ import (
"github.com/stretchr/testify/require"
"github.com/MichaelMure/git-bug/entities/identity"
+ "github.com/MichaelMure/git-bug/entity"
"github.com/MichaelMure/git-bug/repository"
)
@@ -40,37 +41,46 @@ func TestOperationPackReadWrite(t *testing.T) {
}
func TestOperationPackSignedReadWrite(t *testing.T) {
- repo, author, _, resolver, def := makeTestContext()
-
- err := author.(*identity.Identity).Mutate(repo, func(orig *identity.Mutator) {
- orig.Keys = append(orig.Keys, identity.GenerateKey())
- })
- require.NoError(t, err)
+ type makerFn func() (repository.ClockedRepo, identity.Interface, identity.Interface, entity.Resolvers, Definition)
- opp := &operationPack{
- Author: author,
- Operations: []Operation{
- newOp1(author, "foo"),
- newOp2(author, "bar"),
+ for _, maker := range []makerFn{
+ makeTestContext,
+ func() (repository.ClockedRepo, identity.Interface, identity.Interface, entity.Resolvers, Definition) {
+ return makeTestContextGoGit(t)
},
- CreateTime: 123,
- EditTime: 456,
- }
-
- commitHash, err := opp.Write(def, repo)
- require.NoError(t, err)
-
- commit, err := repo.ReadCommit(commitHash)
- require.NoError(t, err)
-
- opp2, err := readOperationPack(def, repo, resolver, commit)
- require.NoError(t, err)
-
- for _, op := range opp.Operations {
- // force the creation of the id
- op.Id()
+ } {
+ repo, author, _, resolver, def := maker()
+
+ err := author.(*identity.Identity).Mutate(repo, func(orig *identity.Mutator) {
+ orig.Keys = append(orig.Keys, identity.GenerateKey())
+ })
+ require.NoError(t, err)
+
+ opp := &operationPack{
+ Author: author,
+ Operations: []Operation{
+ newOp1(author, "foo"),
+ newOp2(author, "bar"),
+ },
+ CreateTime: 123,
+ EditTime: 456,
+ }
+
+ commitHash, err := opp.Write(def, repo)
+ require.NoError(t, err)
+
+ commit, err := repo.ReadCommit(commitHash)
+ require.NoError(t, err)
+
+ opp2, err := readOperationPack(def, repo, resolver, commit)
+ require.NoError(t, err)
+
+ for _, op := range opp.Operations {
+ // force the creation of the id
+ op.Id()
+ }
+ require.Equal(t, opp, opp2)
}
- require.Equal(t, opp, opp2)
}
func TestOperationPackFiles(t *testing.T) {
diff --git a/go.mod b/go.mod
index 435e92d7..0f8fb64e 100644
--- a/go.mod
+++ b/go.mod
@@ -2,11 +2,14 @@ module github.com/MichaelMure/git-bug
go 1.19
+// https://github.com/praetorian-inc/gokart/pull/84
+replace github.com/praetorian-inc/gokart v0.5.1 => github.com/selesy/gokart v0.5.2-rc1
+
require (
- github.com/99designs/gqlgen v0.17.20
+ github.com/99designs/gqlgen v0.17.36
github.com/99designs/keyring v1.2.2
github.com/MichaelMure/go-term-text v0.3.1
- github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4
+ github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95
github.com/araddon/dateparse v0.0.0-20190622164848-0fb0a474d195
github.com/awesome-gocui/gocui v1.1.0
github.com/blevesearch/bleve v1.0.14
@@ -14,7 +17,7 @@ require (
github.com/dustin/go-humanize v1.0.1
github.com/fatih/color v1.15.0
github.com/go-git/go-billy/v5 v5.4.1
- github.com/go-git/go-git/v5 v5.5.2
+ github.com/go-git/go-git/v5 v5.8.1
github.com/gorilla/mux v1.8.0
github.com/hashicorp/golang-lru/v2 v2.0.5
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428
@@ -26,7 +29,7 @@ require (
github.com/spf13/cobra v1.7.0
github.com/stretchr/testify v1.8.4
github.com/vbauerster/mpb/v8 v8.5.2
- github.com/vektah/gqlparser/v2 v2.5.1
+ github.com/vektah/gqlparser/v2 v2.5.8
github.com/xanzy/go-gitlab v0.90.0
golang.org/x/crypto v0.12.0
golang.org/x/oauth2 v0.11.0
@@ -35,30 +38,14 @@ require (
golang.org/x/text v0.12.0
)
-// https://github.com/go-git/go-git/pull/659
-replace github.com/go-git/go-git/v5 => github.com/MichaelMure/go-git/v5 v5.1.1-0.20230114115943-17400561a81c
-
-// https://github.com/praetorian-inc/gokart/pull/84
-replace github.com/praetorian-inc/gokart v0.5.1 => github.com/selesy/gokart v0.5.2-rc1
-
-require (
- github.com/VividCortex/ewma v1.2.0 // indirect
- github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect
- github.com/cloudflare/circl v1.3.3 // indirect
- github.com/hashicorp/golang-lru v0.5.4 // indirect
- github.com/lithammer/dedent v1.1.0 // indirect
- github.com/owenrumney/go-sarif v1.0.11 // indirect
- github.com/pjbgf/sha1cd v0.2.3 // indirect
- github.com/segmentio/fasthash v1.0.3 // indirect
- github.com/skeema/knownhosts v1.1.0 // indirect
- github.com/zclconf/go-cty v1.8.4 // indirect
-)
-
require (
+ dario.cat/mergo v1.0.0 // indirect
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
- github.com/Microsoft/go-winio v0.6.0 // indirect
+ github.com/Microsoft/go-winio v0.6.1 // indirect
github.com/RoaringBitmap/roaring v0.4.23 // indirect
- github.com/acomagu/bufpipe v1.0.3 // indirect
+ github.com/VividCortex/ewma v1.2.0 // indirect
+ github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect
+ github.com/acomagu/bufpipe v1.0.4 // indirect
github.com/agnivade/levenshtein v1.1.1 // indirect
github.com/blevesearch/go-porterstemmer v1.0.3 // indirect
github.com/blevesearch/mmap-go v1.0.2 // indirect
@@ -69,6 +56,7 @@ require (
github.com/blevesearch/zap/v13 v13.0.6 // indirect
github.com/blevesearch/zap/v14 v14.0.5 // indirect
github.com/blevesearch/zap/v15 v15.0.3 // indirect
+ github.com/cloudflare/circl v1.3.3 // indirect
github.com/corpix/uarand v0.1.1 // indirect
github.com/couchbase/vellum v1.0.2 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
@@ -79,8 +67,9 @@ require (
github.com/gdamore/encoding v1.0.0 // indirect
github.com/gdamore/tcell/v2 v2.4.0 // indirect
github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2 // indirect
- github.com/go-git/gcfg v1.5.0 // indirect
+ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
+ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.1 // indirect
github.com/google/go-querystring v1.1.0 // indirect
@@ -88,37 +77,42 @@ require (
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-retryablehttp v0.7.2 // indirect
- github.com/imdario/mergo v0.3.13 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/kevinburke/ssh_config v1.2.0 // indirect
+ github.com/lithammer/dedent v1.1.0 // indirect
github.com/lucasb-eyer/go-colorful v1.0.3 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-runewidth v0.0.14 // indirect
- github.com/mitchellh/mapstructure v1.4.1 // indirect
+ github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mschoch/smat v0.2.0 // indirect
github.com/mtibben/percent v0.2.1 // indirect
+ github.com/owenrumney/go-sarif v1.0.11 // indirect
github.com/philhofer/fwd v1.0.0 // indirect
+ github.com/pjbgf/sha1cd v0.3.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/praetorian-inc/gokart v0.5.1
github.com/rivo/uniseg v0.4.4 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
- github.com/sergi/go-diff v1.2.0 // indirect
+ github.com/segmentio/fasthash v1.0.3 // indirect
+ github.com/sergi/go-diff v1.3.1 // indirect
github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f // indirect
+ github.com/skeema/knownhosts v1.2.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/steveyen/gtreap v0.1.0 // indirect
github.com/stretchr/objx v0.5.0 // indirect
github.com/tinylib/msgp v1.1.0 // indirect
- github.com/urfave/cli/v2 v2.8.1 // indirect
+ github.com/urfave/cli/v2 v2.25.5 // indirect
github.com/willf/bitset v1.1.10 // indirect
github.com/xanzy/ssh-agent v0.3.3 // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
+ github.com/zclconf/go-cty v1.8.4 // indirect
go.etcd.io/bbolt v1.3.5 // indirect
golang.org/x/mod v0.10.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/term v0.11.0
golang.org/x/time v0.3.0 // indirect
- golang.org/x/tools v0.8.1-0.20230421161920-b9619ee54b47 // indirect
+ golang.org/x/tools v0.9.3 // indirect
golang.org/x/vuln v1.0.0
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.31.0 // indirect
diff --git a/go.sum b/go.sum
index 90449070..583c40c1 100644
--- a/go.sum
+++ b/go.sum
@@ -1,38 +1,35 @@
+dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
+dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs=
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4=
-github.com/99designs/gqlgen v0.17.20 h1:O7WzccIhKB1dm+7g6dhQcULINftfiLSBg2l/mwbpJMw=
-github.com/99designs/gqlgen v0.17.20/go.mod h1:Mja2HI23kWT1VRH09hvWshFgOzKswpO20o4ScpJIES4=
+github.com/99designs/gqlgen v0.17.36 h1:u/o/rv2SZ9s5280dyUOOrkpIIkr/7kITMXYD3rkJ9go=
+github.com/99designs/gqlgen v0.17.36/go.mod h1:6RdyY8puhCoWAQVr2qzF2OMVfudQzc8ACxzpzluoQm4=
github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0=
github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/Masterminds/glide v0.13.2/go.mod h1:STyF5vcenH/rUqTEv+/hBXlSTo7KYwg2oc2f4tzPWic=
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Masterminds/vcs v1.13.0/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA=
-github.com/MichaelMure/go-git/v5 v5.1.1-0.20230114115943-17400561a81c h1:JFFZbyq4cdKo+QrKNxXemMftPy08aS9gELrPTlPTaZU=
-github.com/MichaelMure/go-git/v5 v5.1.1-0.20230114115943-17400561a81c/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI=
github.com/MichaelMure/go-term-text v0.3.1 h1:Kw9kZanyZWiCHOYu9v/8pWEgDQ6UVN9/ix2Vd2zzWf0=
github.com/MichaelMure/go-term-text v0.3.1/go.mod h1:QgVjAEDUnRMlzpS6ky5CGblux7ebeiLnuy9dAaFZu8o=
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
-github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg=
-github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE=
-github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I=
-github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8=
+github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
+github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
+github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 h1:KLq8BE0KwCL+mmXnjLWEAOYO+2l2AE4YMmqG1ZpZHBs=
+github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
github.com/RoaringBitmap/roaring v0.4.23 h1:gpyfd12QohbqhFO4NVDUdoPOCXsyahYRQhINmlHxKeo=
github.com/RoaringBitmap/roaring v0.4.23/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow=
github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4=
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8=
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo=
-github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk=
-github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4=
-github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
+github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ=
+github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4=
github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8=
github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
-github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo=
github.com/araddon/dateparse v0.0.0-20190622164848-0fb0a474d195 h1:c4mLfegoDw6OhSJXTd2jUEQgZUQuJWtocudb97Qn9EM=
github.com/araddon/dateparse v0.0.0-20190622164848-0fb0a474d195/go.mod h1:SLqhdZcd+dF3TEVL2RMoob5bBP5R1P1qkox+HtCBgGI=
@@ -40,7 +37,6 @@ github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
-github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/awesome-gocui/gocui v1.1.0 h1:db2j7yFEoHZjpQFeE2xqiatS8bm1lO3THeLwE6MzOII=
github.com/awesome-gocui/gocui v1.1.0/go.mod h1:M2BXkrp7PR97CKnPRT7Rk0+rtswChPtksw/vRAESGpg=
github.com/blevesearch/bleve v1.0.14 h1:Q8r+fHTt35jtGXJUM0ULwM3Tzg+MRfyai4ZkWDy2xO4=
@@ -66,10 +62,9 @@ github.com/blevesearch/zap/v14 v14.0.5 h1:NdcT+81Nvmp2zL+NhwSvGSLh7xNgGL8QRVZ67n
github.com/blevesearch/zap/v14 v14.0.5/go.mod h1:bWe8S7tRrSBTIaZ6cLRbgNH4TUDaC9LZSpRGs85AsGY=
github.com/blevesearch/zap/v15 v15.0.3 h1:Ylj8Oe+mo0P25tr9iLPp33lN6d4qcztGjaIsP51UxaY=
github.com/blevesearch/zap/v15 v15.0.3/go.mod h1:iuwQrImsh1WjWJ0Ue2kBqY83a0rFtJTqfa9fp1rbVVU=
-github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
+github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE=
github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ=
-github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I=
github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs=
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA=
@@ -83,7 +78,6 @@ github.com/couchbase/moss v0.1.0/go.mod h1:9MaHIaRuy9pvLPUJxB8sh8OrLfyDczECVL37g
github.com/couchbase/vellum v1.0.2 h1:BrbP0NKiyDdndMPec8Jjhy0U47CZ0Lgx3xUC2r9rZqw=
github.com/couchbase/vellum v1.0.2/go.mod h1:FcwrEivFpNi24R3jLOs3n+fs5RnuQnQqCLBJ1uAg1W4=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
-github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
@@ -102,6 +96,7 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM=
github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU=
+github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64=
@@ -115,21 +110,21 @@ github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo
github.com/gdamore/tcell/v2 v2.4.0 h1:W6dxJEmaxYvhICFoTY3WrLLEXsQ11SaFnKGVEXW57KM=
github.com/gdamore/tcell/v2 v2.4.0/go.mod h1:cTTuF84Dlj/RqmaCIV5p4w8uG1zWdk0SF6oBpwHp4fU=
github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
-github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2 h1:Ujru1hufTHVb++eG6OuNDKMxZnGIvF6o/u8q/8h2+I4=
github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31 h1:gclg6gY70GLy3PbkQ1AERPfmLMMagS60DKF78eWwLn8=
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
-github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
-github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
-github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
-github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg=
+github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
+github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4=
github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg=
-github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ=
-github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo=
+github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8=
+github.com/go-git/go-git/v5 v5.8.1 h1:Zo79E4p7TRk0xoRgMq0RShiTHGKcKI4+DI6BfJc/Q+A=
+github.com/go-git/go-git/v5 v5.8.1/go.mod h1:FHFuoD6yGz5OSKEBK+aWN9Oah0q54Jxl0abmj6GnqAo=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -145,7 +140,6 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA=
@@ -163,8 +157,6 @@ github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxC
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0=
github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
-github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
-github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4=
github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
@@ -172,38 +164,34 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428 h1:Mo9W14pwbO9VfRe+ygqZ8dFbPpoIK1HFrG/zjTuQ+nc=
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428/go.mod h1:uhpZMVGznybq1itEKXj6RYw9I71qK4kH+OGMjRC4KEo=
github.com/ikawaha/kagome.ipadic v1.1.2/go.mod h1:DPSBbU0czaJhAb/5uKQZHMc9MTVRpDugJfX+HddPHHg=
-github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
-github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
-github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U=
github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
-github.com/kevinmbeaulieu/eq-go v1.0.0/go.mod h1:G3S8ajA56gKBZm4UB9AOyoOS37JO3roToPzKNM8dtdM=
github.com/kljensen/snowball v0.6.0/go.mod h1:27N7E8fVU5H68RlUmnWwZCfxgt4POBJfENGMvNRhldw=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lithammer/dedent v1.1.0 h1:VNzHMVCBNG1j0fh3OrsFRkVUwStdDArbgBWoPAffktY=
github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
-github.com/logrusorgru/aurora/v3 v3.0.0/go.mod h1:vsR12bk5grlLvLXAYrBsb5Oc/N+LxAlxggSjiwMnCUc=
github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac=
github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A=
github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
github.com/matryer/moq v0.2.7/go.mod h1:kITsx543GOENm48TUAQyJ9+SAvFSr7iGQXPoth/VUBk=
+github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
@@ -215,9 +203,8 @@ github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWV
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
-github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg=
github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM=
github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw=
@@ -235,8 +222,8 @@ github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5 h1:rZQtoozkfsiNs36
github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
-github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI=
-github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M=
+github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
+github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -247,6 +234,7 @@ github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
+github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
@@ -254,16 +242,15 @@ github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtr
github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY=
github.com/selesy/gokart v0.5.2-rc1 h1:YVuiDAhSu3D+llE0MRVrm1UbZfRqIBujgdukKuLt2Us=
github.com/selesy/gokart v0.5.2-rc1/go.mod h1:ct26Da/yw3veTtt3m6nXT9EVZl5WBX59OcxuIigQej8=
-github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
-github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
-github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
+github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
+github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
github.com/shurcooL/githubv4 v0.0.0-20190601194912-068505affed7 h1:Vk3RiBQpF0Ja+OqbFG7lYTk79+l8Cm2QESLXB0x6u6U=
github.com/shurcooL/githubv4 v0.0.0-20190601194912-068505affed7/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo=
github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f h1:tygelZueB1EtXkPI6mQ4o9DQ0+FKW41hTbunoXZCTqk=
github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0=
-github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag=
+github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM=
+github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo=
github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e h1:VAzdS5Nw68fbf5RZ8RDVlUvPXNU6Z3jtPCK/qvm4FoQ=
github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
@@ -298,12 +285,12 @@ github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7
github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU=
github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
-github.com/urfave/cli/v2 v2.8.1 h1:CGuYNZF9IKZY/rfBe3lJpccSoIY1ytfvmgQT90cNOl4=
-github.com/urfave/cli/v2 v2.8.1/go.mod h1:Z41J9TPoffeoqP0Iza0YbAhGvymRdZAd2uPmZ5JxRdY=
+github.com/urfave/cli/v2 v2.25.5 h1:d0NIAyhh5shGscroL7ek/Ya9QYQE0KNabJgiUinIQkc=
+github.com/urfave/cli/v2 v2.25.5/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc=
github.com/vbauerster/mpb/v8 v8.5.2 h1:zanzt1cZpSEG5uGNYKcv43+97f0IgEnXpuBFaMxKbM0=
github.com/vbauerster/mpb/v8 v8.5.2/go.mod h1:YqKyR4ZR6Gd34yD3cDHPMmQxc+uUQMwjgO/LkxiJQ6I=
-github.com/vektah/gqlparser/v2 v2.5.1 h1:ZGu+bquAY23jsxDRcYpWjttRZrUz07LbiY77gUOHcr4=
-github.com/vektah/gqlparser/v2 v2.5.1/go.mod h1:mPgqFBu/woKTVYWyNk8cO3kh4S/f4aRFZrvOnp3hmCs=
+github.com/vektah/gqlparser/v2 v2.5.8 h1:pm6WOnGdzFOCfcQo9L3+xzW51mKrlwTEg4Wr7AH1JW4=
+github.com/vektah/gqlparser/v2 v2.5.8/go.mod h1:z8xXUff237NntSuH8mLFijZ+1tjV1swDbpDqjJmk6ME=
github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
github.com/willf/bitset v1.1.10 h1:NotGKqX0KwQ72NUzqrjZq5ipPNDQex9lo3WpaS8L2sc=
@@ -315,7 +302,6 @@ github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
-github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/zclconf/go-cty v1.8.4 h1:pwhhz5P+Fjxse7S7UriBrMu6AUJSZM5pKqGem1PjGAs=
github.com/zclconf/go-cty v1.8.4/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=
@@ -324,14 +310,13 @@ go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
+golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
+golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
-golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -339,19 +324,19 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU=
golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -362,30 +347,28 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0=
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -395,34 +378,32 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.8.1-0.20230421161920-b9619ee54b47 h1:fQlOhMJ24apqitZX8S4hbCbHU1Z9AvyWkN3BYI55Le4=
-golang.org/x/tools v0.8.1-0.20230421161920-b9619ee54b47/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM=
+golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
golang.org/x/vuln v1.0.0 h1:tYLAU3jD9LQr98Y+3el06lWyGMCnvzw06PIWP3LIy7g=
golang.org/x/vuln v1.0.0/go.mod h1:V0eyhHwaAaHrt42J9bgrN6rd12f6GU4T0Lu0ex2wDg4=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
@@ -432,11 +413,8 @@ gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=