vitessio/vitess · error

missing file on disk: %s (%w)

Error message

missing file on disk: %s (%w)

What it means

VerifyFilesOnDisk compares each generated file against the file on disk. If os.ReadFile fails for the expected output path, the error is collected with the OS error wrapped, meaning the codegen expects a file that does not exist (or is unreadable).

Source

Thrown at go/tools/asthelpergen/asthelpergen.go:228

		return nil, err
	}

	result := map[string]*jen.File{}
	for fName, genFile := range jenFiles {
		fullPath := path.Join(gen.mod.Dir, strings.TrimPrefix(pkg.Path(), gen.mod.Path), fName)
		result[fullPath] = genFile
	}

	return result, nil
}

// VerifyFilesOnDisk compares the generated results from the codegen against the files that
// currently exist on disk and returns any mismatches
func VerifyFilesOnDisk(result map[string]*jen.File) (errors []error) {
	for fullPath, file := range result {
		existing, err := os.ReadFile(fullPath)
		if err != nil {
			errors = append(errors, fmt.Errorf("missing file on disk: %s (%w)", fullPath, err))
			continue
		}

		genFile, err := codegen.FormatJenFile(file)
		if err != nil {
			errors = append(errors, fmt.Errorf("goimport error: %w", err))
			continue
		}

		if !bytes.Equal(existing, genFile) {
			errors = append(errors, fmt.Errorf("'%s' has changed", fullPath))
			continue
		}
	}
	return errors
}

// Options configures the AST helper generation process.

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Run `asthelpergen` (or `make codegen`) without verify to generate and write the missing files
  2. Restore the deleted generated files (git checkout -- go/vt/sqlparser/)
  3. Check file permissions on the expected output path

Example fix

// before (verify fails)
$ asthelpergen verify
// after
$ asthelpergen && asthelpergen verify
Defensive patterns

Strategy: fallback

Validate before calling

if _, err := os.Stat(expectedPath); os.IsNotExist(err) {
    fmt.Printf("missing generated file %s; run make codegen\n", expectedPath)
}

Try / catch

errs := VerifyFilesOnDisk(result)
for _, err := range errs {
    var pe *fs.PathError
    if errors.As(err, &pe) && os.IsNotExist(pe) {
        // regenerate instead of failing verification
    }
}

Prevention

When it happens

Trigger: Running `asthelpergen verify` (or TestFullGeneration) after generated files were deleted or never committed; the result map contains paths like go/vt/sqlparser/ast_clone.go that are absent on disk.

Common situations: Fresh clone before running `make codegen`; a developer deleted generated files; file permissions or a wrong output directory cause ReadFile to fail.

Related errors


AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01). Data as JSON: /api/errors/d4bd50f209744f5f. Report an issue: GitHub.