{"record":{"id":"54c91277ceb513ae","repo":"wagoodman/dive","slug":"file-tree-has-path-errors-use-ignore-errors-t","errorCode":null,"errorMessage":"file tree has path errors (use '--ignore-errors' to attempt to continue)","messagePattern":"file tree has path errors \\(use '--ignore-errors' to attempt to continue\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/dive/cli/internal/ui/v1/config.go","lineNumber":54,"sourceCode":"\t\tKeyBindings:                key.DefaultBindings(),\n\t\tShowFiletreeAttributes:     true,\n\t\tShowAggregatedLayerChanges: true,\n\t\tCollapseFiletreeDirectory:  false, // don't start with collapsed directories\n\t\tFiletreePaneWidth:          0.5,\n\t\tFiletreeDiffHide:           []string{}, // empty slice means show all\n\t}\n}\n\nfunc (c *Config) TreeComparer() (filetree.Comparer, error) {\n\tif c.do == nil {\n\t\tc.do = &sync.Once{}\n\t}\n\tc.do.Do(func() {\n\t\ttreeStack := filetree.NewComparer(c.Analysis.RefTrees)\n\t\terrs := treeStack.BuildCache()\n\t\tif errs != nil {\n\t\t\tif !c.Preferences.IgnoreErrors {\n\t\t\t\terrs = append(errs, fmt.Errorf(\"file tree has path errors (use '--ignore-errors' to attempt to continue)\"))\n\t\t\t\tc.stackErrs = errors.Join(errs...)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tc.stack = treeStack\n\t})\n\n\treturn c.stack, c.stackErrs\n}\n\ntype ContentReader interface {\n\tExtract(ctx context.Context, id string, layer string, path string) error\n}\n","sourceCodeStart":36,"sourceCodeEnd":68,"githubUrl":"https://github.com/wagoodman/dive/blob/d6c691947f8fda635c952a17ee3b7555379d58f0/cmd/dive/cli/internal/ui/v1/config.go#L36-L68","documentation":"Raised lazily by the v1 UI config's TreeComparer() when building the filetree comparison cache over the analysis ref-trees produced path errors (duplicate paths, unhashable/corrupt nodes). By default these errors abort the TUI; the message points at the --ignore-errors flag which sets Preferences.IgnoreErrors to tolerate them and continue with the partially built comparer.","triggerScenarios":"Analyzing an image whose layer filetrees contain path inconsistencies — e.g. duplicate file paths across layers, invalid path characters, or malformed tar entries — while --ignore-errors is not set. BuildCache() returns non-empty errs and the original path errors are joined beneath this sentinel message.","commonSituations":"Images built by unusual or buggy builders (some old Docker versions, hand-crafted tars, windows-base images with case-differing paths); images with whiteout-file edge cases; after a dive version upgrade that tightened path validation.","solutions":["Re-run with --ignore-errors to let dive continue despite the path problems (results may be slightly incomplete).","Inspect the joined underlying errors (errors.Join chain) to see which paths are problematic.","Rebuild or normalize the image (e.g. docker save then docker load) to fix tar-level oddities.","Report the image's builder details upstream if the tree should have been valid."],"exampleFix":"# before\ndive myimage:latest   # -> file tree has path errors (use '--ignore-errors' to attempt to continue)\n\n# after\ndive myimage:latest --ignore-errors","handlingStrategy":"fallback","validationCode":"# preflight: tolerate path errors when the image source is not fully trusted\ndive myimage --ignore-errors 2>/dev/null || dive myimage --ignore-errors","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Add --ignore-errors to pipelines that scan third-party or unusual images.","Normalize images (docker save/load) before analysis to repair tar oddities.","Read the joined error chain to identify offending paths before ignoring them."],"tags":["dive","tui","filetree","image-data","cli"],"backgroundTag":null,"analyzedSha":"d6c691947f8fda635c952a17ee3b7555379d58f0","analyzedAt":"2026-08-15T09:42:35.293Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}