Fix for the 'kubectl explain crd --recursive' goes into an infinite loop issue

This commit is contained in:
Vikranth Thati
2018-10-31 03:30:46 +05:30
parent 03a145de8a
commit 05a461c17b
4 changed files with 113 additions and 1 deletions

View File

@@ -30,6 +30,7 @@ type recursiveFieldsPrinter struct {
var _ proto.SchemaVisitor = &recursiveFieldsPrinter{}
var _ fieldsPrinter = &recursiveFieldsPrinter{}
var visitedReferences = map[string]struct{}{}
// VisitArray is just a passthrough.
func (f *recursiveFieldsPrinter) VisitArray(a *proto.Array) {
@@ -64,7 +65,12 @@ func (f *recursiveFieldsPrinter) VisitPrimitive(p *proto.Primitive) {
// VisitReference is just a passthrough.
func (f *recursiveFieldsPrinter) VisitReference(r proto.Reference) {
if _, ok := visitedReferences[r.Reference()]; ok {
return
}
visitedReferences[r.Reference()] = struct{}{}
r.SubSchema().Accept(f)
delete(visitedReferences, r.Reference())
}
// PrintFields will recursively print all the fields for the given