diff options
Diffstat (limited to 'vendor/github.com/go-openapi/analysis/flatten.go')
-rw-r--r-- | vendor/github.com/go-openapi/analysis/flatten.go | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/vendor/github.com/go-openapi/analysis/flatten.go b/vendor/github.com/go-openapi/analysis/flatten.go index 6993e4baf8..ae1eef5d19 100644 --- a/vendor/github.com/go-openapi/analysis/flatten.go +++ b/vendor/github.com/go-openapi/analysis/flatten.go @@ -201,9 +201,7 @@ func Flatten(opts FlattenOpts) error { expected[slashpath.Join(definitionsPath, jsonpointer.Escape(k))] = struct{}{} } for _, k := range opts.Spec.AllDefinitionReferences() { - if _, ok := expected[k]; ok { - delete(expected, k) - } + delete(expected, k) } for k := range expected { debugLog("removing unused definition %s", slashpath.Base(k)) @@ -443,7 +441,7 @@ func uniqifyName(definitions swspec.Definitions, name string) (string, bool) { unq := true for k := range definitions { - if strings.ToLower(k) == strings.ToLower(name) { + if strings.EqualFold(k, name) { unq = false break } @@ -933,6 +931,7 @@ type refRevIdx struct { // * refs are assumed to have been normalized with drive letter lower cased (from go-openapi/spec) // * "/ in paths may appear as escape sequences func rebaseRef(baseRef string, ref string) string { + debugLog("rebasing ref: %s onto %s", ref, baseRef) baseRef, _ = url.PathUnescape(baseRef) ref, _ = url.PathUnescape(ref) if baseRef == "" || baseRef == "." || strings.HasPrefix(baseRef, "#") { @@ -947,7 +946,7 @@ func rebaseRef(baseRef string, ref string) string { if baseURL.Host == "" { return strings.Join([]string{baseParts[0], parts[1]}, "#") } - return strings.Join([]string{baseParts[0], parts[1]}, "") + return strings.Join([]string{baseParts[0], parts[1]}, "#") } refURL, _ := url.Parse(parts[0]) @@ -1322,7 +1321,7 @@ func stripPointersAndOAIGen(opts *FlattenOpts) error { // stripOAIGen strips the spec from unnecessary OAIGen constructs, initially created to dedupe flattened definitions. // // A dedupe is deemed unnecessary whenever: -// - the only conflict is with its (single) parent: OAIGen is merged into its parent +// - the only conflict is with its (single) parent: OAIGen is merged into its parent (reinlining) // - there is a conflict with multiple parents: merge OAIGen in first parent, the rewrite other parents to point to // the first parent. // @@ -1358,12 +1357,12 @@ func stripOAIGen(opts *FlattenOpts) (bool, error) { r := opts.flattenContext.newRefs[k] //debugLog("newRefs[%s]: isOAIGen: %t, resolved: %t, name: %s, path:%s, #parents: %d, parents: %v, ref: %s", // k, r.isOAIGen, r.resolved, r.newName, r.path, len(r.parents), r.parents, r.schema.Ref.String()) - if r.isOAIGen && len(r.parents) >= 1 /*&& r.schema.Ref.String() == "" */ { + if r.isOAIGen && len(r.parents) >= 1 { pr := r.parents sort.Strings(pr) // rewrite first parent schema in lexicographical order - debugLog("rewrite first parent %s with schema", pr[0]) + debugLog("rewrite first parent in lex order %s with schema", pr[0]) if err := updateRefWithSchema(opts.Swagger(), pr[0], r.schema); err != nil { return false, err } @@ -1413,9 +1412,13 @@ func stripOAIGen(opts *FlattenOpts) (bool, error) { found := false newParents := make([]string, 0, len(value.parents)) for _, parent := range value.parents { - if parent == r.path { + switch { + case parent == r.path: found = true parent = pr[0] + case strings.HasPrefix(parent, r.path+"/"): + found = true + parent = slashpath.Join(pr[0], strings.TrimPrefix(parent, r.path)) } newParents = append(newParents, parent) } @@ -1435,7 +1438,7 @@ func stripOAIGen(opts *FlattenOpts) (bool, error) { if err != nil { return false, err } - debugLog("re-inline schema: parent: %s, %t", pr[0], isAnalyzedAsComplex(asch)) + debugLog("re-inlined schema: parent: %s, %t", pr[0], isAnalyzedAsComplex(asch)) replacedWithComplex = replacedWithComplex || !(slashpath.Dir(pr[0]) == definitionsPath) && isAnalyzedAsComplex(asch) } |