dirsql 0.4.6__tar.gz → 0.4.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dirsql-0.4.6 → dirsql-0.4.7}/Cargo.lock +18 -1
- {dirsql-0.4.6 → dirsql-0.4.7}/PKG-INFO +1 -1
- {dirsql-0.4.6/packages/python → dirsql-0.4.7}/docs/reference/cli.md +3 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/reference/path-tables.md +34 -5
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/Cargo.toml +1 -1
- {dirsql-0.4.6/packages/rust → dirsql-0.4.7/packages/python}/docs/reference/cli.md +3 -0
- {dirsql-0.4.6/packages/rust → dirsql-0.4.7/packages/python}/docs/reference/path-tables.md +34 -5
- dirsql-0.4.7/packages/python/e2e-attestations/feat-742-gitignore-by-default.json +7 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/Cargo.toml +3 -0
- dirsql-0.4.7/packages/rust/changelog.d/2026-08-03-gitignore-by-default.md +9 -0
- dirsql-0.4.7/packages/rust/changelog.d/2026-08-03-nested-default-ignores.md +11 -0
- {dirsql-0.4.6 → dirsql-0.4.7/packages/rust}/docs/reference/cli.md +3 -0
- {dirsql-0.4.6/packages/python → dirsql-0.4.7/packages/rust}/docs/reference/path-tables.md +34 -5
- dirsql-0.4.7/packages/rust/migrations.d/2026-08-03-gitignore-by-default.md +52 -0
- dirsql-0.4.7/packages/rust/migrations.d/2026-08-03-nested-default-ignores.md +46 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/bin/dirsql.rs +31 -7
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/db.rs +63 -12
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/lib.rs +39 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/matcher.rs +41 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/parsed_vtab.rs +52 -17
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/path_table.rs +5 -4
- dirsql-0.4.7/packages/rust/src/scanner.rs +609 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/vtab.rs +51 -16
- dirsql-0.4.6/packages/rust/src/scanner.rs +0 -220
- {dirsql-0.4.6 → dirsql-0.4.7}/Cargo.toml +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/README.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/__init__.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/_async.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/_dirsql.pyi +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/cli/__init__.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/cli/binary_path.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/cli/discover_plugins/__init__.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/cli/discover_plugins/user_passed_config.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/cli/is_windows.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/cli/main.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/cli/resolve_config_extensions.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/py.typed +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/resolve_config_extensions.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/dirsql/resolve_extension.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/AGENTS.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/explanation.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/getting-started.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/embed.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/persist.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/index.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/migrations.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/package.json +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/reference/columns.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/reference/config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/reference/hooks.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/reference/http-api.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/docs/reference/sdk.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/CHANGELOG.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/MIGRATIONS.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/README.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/changelog.d/README.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/conftest.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/AGENTS.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/explanation.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/getting-started.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/embed.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/persist.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/index.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/migrations.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/package.json +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/reference/columns.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/reference/config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/reference/hooks.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/reference/http-api.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/docs/reference/sdk.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/e2e-attestations/claude-710-accumulate-onfile.json +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/e2e-attestations/claude-714-unify-file-failures.json +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/e2e-attestations/claude-715-binding-scan-failures.json +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/e2e-attestations/claude-716-drop-regex.json +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/migrations.d/README.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/src/lib.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/tests/__init__.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/tests/conftest.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/tests/e2e/__init__.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/tests/integration/__init__.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/tests/integration/binding/__init__.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/python/tests/integration/hermetic/__init__.py +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/CHANGELOG.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/MIGRATIONS.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/README.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/benches/db_bench.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/benches/differ_bench.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/benches/matcher_bench.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/benches/scanner_bench.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-13-batch-ingest-transaction.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-13-chained-pre-post-query-hooks.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-13-fan-out-file-table-matching.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-13-persist-wal.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-13-repeatable-builder-config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-13-repeatable-cli-config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-13-subcommand-local-config-flags.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-19-path-table-query-fallback.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-19-path-table-vtab.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-20-path-table-glob-semantics.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-20-schema-inference.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-21-on-file-flag.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-23-init-escalation-example.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-23-query-default-cli.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-07-29-on-file-failures-accumulate.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-08-02-drop-regex.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-08-02-per-file-scan-failures.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/2026-08-02-release-profile.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/changelog.d/README.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/explanation.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/getting-started.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/embed.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/persist.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/index.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/migrations.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/reference/columns.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/reference/config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/reference/hooks.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/reference/http-api.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/docs/reference/sdk.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-13-fan-out-file-table-matching.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-13-persist-wal.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-13-subcommand-local-config-flags.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-20-path-table-glob-semantics.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-23-init-escalation-example.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-23-query-default-cli.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/2026-08-02-per-file-scan-failures.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/migrations.d/README.md +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/cli/execute.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/cli/init.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/cli/mod.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/cli/router.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/cli/serialize.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/cli/server.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/command.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/config.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/default_config.toml +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/differ.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/infer.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/persist.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/packages/rust/src/watcher.rs +0 -0
- {dirsql-0.4.6 → dirsql-0.4.7}/pyproject.toml +0 -0
|
@@ -470,6 +470,7 @@ dependencies = [
|
|
|
470
470
|
"futures-executor",
|
|
471
471
|
"futures-util",
|
|
472
472
|
"globset",
|
|
473
|
+
"ignore",
|
|
473
474
|
"libc",
|
|
474
475
|
"notify",
|
|
475
476
|
"predicates",
|
|
@@ -499,7 +500,7 @@ dependencies = [
|
|
|
499
500
|
|
|
500
501
|
[[package]]
|
|
501
502
|
name = "dirsql-py-ext"
|
|
502
|
-
version = "0.4.
|
|
503
|
+
version = "0.4.7"
|
|
503
504
|
dependencies = [
|
|
504
505
|
"dirsql",
|
|
505
506
|
"pyo3",
|
|
@@ -1138,6 +1139,22 @@ dependencies = [
|
|
|
1138
1139
|
"icu_properties",
|
|
1139
1140
|
]
|
|
1140
1141
|
|
|
1142
|
+
[[package]]
|
|
1143
|
+
name = "ignore"
|
|
1144
|
+
version = "0.4.32"
|
|
1145
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1146
|
+
checksum = "0b17771570a2b94107741a7b033f19132c2eee21d59d21b24d2ced26500bd66e"
|
|
1147
|
+
dependencies = [
|
|
1148
|
+
"crossbeam-deque",
|
|
1149
|
+
"globset",
|
|
1150
|
+
"log",
|
|
1151
|
+
"memchr",
|
|
1152
|
+
"regex-automata",
|
|
1153
|
+
"same-file",
|
|
1154
|
+
"walkdir",
|
|
1155
|
+
"winapi-util",
|
|
1156
|
+
]
|
|
1157
|
+
|
|
1141
1158
|
[[package]]
|
|
1142
1159
|
name = "indexmap"
|
|
1143
1160
|
version = "2.14.0"
|
|
@@ -69,6 +69,7 @@ Config flags are subcommand-local: pass them after `server`
|
|
|
69
69
|
| `--host <addr>` | `localhost` | Bind address. |
|
|
70
70
|
| `--port <n>` | `7117` | TCP port to bind. |
|
|
71
71
|
| `--persist [<path>]` | off | Keep the SQLite index on disk between runs so a restart only re-parses files that actually changed. Bare `--persist` caches at `<root>/.dirsql/cache.db`; `--persist <path>` caches at `<path>`. Off by default (the index is ephemeral). Also available on [`dirsql query`](#dirsql-query). See [Keep the index across restarts](../howto/persist.md). |
|
|
72
|
+
| `--no-ignore` | off | Scan files a `.gitignore` would hide. [Path-tables](./path-tables.md#skip-rules) respect `.gitignore` files by default; this flag restores the full walk. The built-in skips (`node_modules`/`.git`) and configured `ignore` patterns still apply. Also available on [`dirsql query`](#dirsql-query). |
|
|
72
73
|
| `--extension <path>` | none | Load a SQLite extension by literal path, overriding the config's `[[dirsql.extension]]` entries. Repeatable. Format: `<path>` or `<path>::<entrypoint>`. Internal plumbing for the pip/npm launchers, which resolve package-name extensions and pass the resolved paths here — not intended for direct use. When any `--extension` is present, the config file's own extension entries are not loaded. |
|
|
73
74
|
| `--version` | | Print the version and exit. |
|
|
74
75
|
| `--help` | | Print usage and exit. |
|
|
@@ -163,6 +164,8 @@ uses**, so behavior is identical to `POST /query` by construction:
|
|
|
163
164
|
on-disk cache. Because its value is optional, place a bare `--persist` after
|
|
164
165
|
the SQL (`dirsql query "SELECT …" --persist`) or use the `=` form
|
|
165
166
|
(`--persist=/path`) so it does not swallow the SQL argument.
|
|
167
|
+
- **`--no-ignore`** is honored: path-tables in the query scan files a
|
|
168
|
+
`.gitignore` would hide. See [Skip rules](./path-tables.md#skip-rules).
|
|
166
169
|
- **Hooks** ([`pre-query`](./hooks.md#pre-query) /
|
|
167
170
|
[`post-query`](./hooks.md#post-query)) and the
|
|
168
171
|
[`[dirsql].hook-timeout`](./config.md#dirsql-keys) apply identically.
|
|
@@ -179,19 +179,48 @@ A path-table scan applies the same [`ignore`](/reference/config) patterns your
|
|
|
179
179
|
declared tables use, plus two built-in defaults so a zero-config
|
|
180
180
|
`SELECT * FROM './'` does not drown in machinery:
|
|
181
181
|
|
|
182
|
-
-
|
|
183
|
-
-
|
|
182
|
+
- `**/node_modules/**`
|
|
183
|
+
- `**/.git/**`
|
|
184
|
+
|
|
185
|
+
Both apply at any depth, so a `node_modules` nested inside a subdirectory is
|
|
186
|
+
skipped just like one at the top.
|
|
187
|
+
|
|
188
|
+
### `.gitignore`
|
|
189
|
+
|
|
190
|
+
Path-table scans also respect `.gitignore` files by default, the way fd and
|
|
191
|
+
ripgrep do: a `.gitignore` anywhere in the tree applies below its own
|
|
192
|
+
directory, deeper files override shallower ones, `!pattern` re-includes, and
|
|
193
|
+
an ignored directory is pruned rather than walked. In a typical repo this
|
|
194
|
+
excludes build output, virtualenvs, and caches with zero ceremony. No `.git`
|
|
195
|
+
directory is required — a `.gitignore` in any scanned directory counts — and
|
|
196
|
+
the built-in defaults above remain as a floor for directories with no
|
|
197
|
+
`.gitignore` at all.
|
|
198
|
+
|
|
199
|
+
Pass [`--no-ignore`](./cli.md#flags) to restore the full walk — the
|
|
200
|
+
determinism switch for scripted use, since results otherwise depend on
|
|
201
|
+
`.gitignore` state. It disables only the `.gitignore` respect; the built-in
|
|
202
|
+
defaults and configured `ignore` patterns still apply.
|
|
203
|
+
|
|
204
|
+
### Naming a skipped directory
|
|
184
205
|
|
|
185
206
|
Skip rules are judged on the part of the path *below* what you named outright,
|
|
186
|
-
so pointing at a skipped directory still scans it:
|
|
207
|
+
so pointing at a skipped directory — built-in or gitignored — still scans it:
|
|
187
208
|
|
|
188
209
|
```sql
|
|
189
210
|
SELECT path FROM './'; -- no node_modules rows
|
|
190
211
|
SELECT path FROM './node_modules/*/package.json'; -- scans it anyway
|
|
212
|
+
SELECT path FROM './dist'; -- scans dist/ even when gitignored
|
|
191
213
|
```
|
|
192
214
|
|
|
193
|
-
|
|
194
|
-
|
|
215
|
+
A `.gitignore` at or below the directory you named still filters beneath it;
|
|
216
|
+
only rules inherited from above it are set aside.
|
|
217
|
+
|
|
218
|
+
### Hidden files
|
|
219
|
+
|
|
220
|
+
Dotfiles are ordinary files: `'./'` and `'./*'` include them, with or without
|
|
221
|
+
`--no-ignore`. This is a deliberate divergence from fd/ripgrep — querying
|
|
222
|
+
dotfile directories (`.claude/`, …) is a first-class `dirsql` use case. Add an
|
|
223
|
+
`ignore` pattern if you would rather not see them.
|
|
195
224
|
|
|
196
225
|
## Joining against declared tables
|
|
197
226
|
|
|
@@ -4,7 +4,7 @@ name = "dirsql-py-ext"
|
|
|
4
4
|
# pypi/maturin handler can rewrite it via `write-version` before
|
|
5
5
|
# `maturin build`. `pyproject.toml` declares `dynamic = ["version"]`
|
|
6
6
|
# and maturin reads this field. Mirrors `packages/rust/Cargo.toml`.
|
|
7
|
-
version = "0.4.
|
|
7
|
+
version = "0.4.7"
|
|
8
8
|
# abi3 note: the `abi3-py310` pyo3 feature (below) builds ONE stable-ABI
|
|
9
9
|
# `cp310-abi3` wheel per platform that loads on every CPython >= 3.10
|
|
10
10
|
# (matching `pyproject.toml`'s `requires-python = ">=3.10"`), instead of
|
|
@@ -69,6 +69,7 @@ Config flags are subcommand-local: pass them after `server`
|
|
|
69
69
|
| `--host <addr>` | `localhost` | Bind address. |
|
|
70
70
|
| `--port <n>` | `7117` | TCP port to bind. |
|
|
71
71
|
| `--persist [<path>]` | off | Keep the SQLite index on disk between runs so a restart only re-parses files that actually changed. Bare `--persist` caches at `<root>/.dirsql/cache.db`; `--persist <path>` caches at `<path>`. Off by default (the index is ephemeral). Also available on [`dirsql query`](#dirsql-query). See [Keep the index across restarts](../howto/persist.md). |
|
|
72
|
+
| `--no-ignore` | off | Scan files a `.gitignore` would hide. [Path-tables](./path-tables.md#skip-rules) respect `.gitignore` files by default; this flag restores the full walk. The built-in skips (`node_modules`/`.git`) and configured `ignore` patterns still apply. Also available on [`dirsql query`](#dirsql-query). |
|
|
72
73
|
| `--extension <path>` | none | Load a SQLite extension by literal path, overriding the config's `[[dirsql.extension]]` entries. Repeatable. Format: `<path>` or `<path>::<entrypoint>`. Internal plumbing for the pip/npm launchers, which resolve package-name extensions and pass the resolved paths here — not intended for direct use. When any `--extension` is present, the config file's own extension entries are not loaded. |
|
|
73
74
|
| `--version` | | Print the version and exit. |
|
|
74
75
|
| `--help` | | Print usage and exit. |
|
|
@@ -163,6 +164,8 @@ uses**, so behavior is identical to `POST /query` by construction:
|
|
|
163
164
|
on-disk cache. Because its value is optional, place a bare `--persist` after
|
|
164
165
|
the SQL (`dirsql query "SELECT …" --persist`) or use the `=` form
|
|
165
166
|
(`--persist=/path`) so it does not swallow the SQL argument.
|
|
167
|
+
- **`--no-ignore`** is honored: path-tables in the query scan files a
|
|
168
|
+
`.gitignore` would hide. See [Skip rules](./path-tables.md#skip-rules).
|
|
166
169
|
- **Hooks** ([`pre-query`](./hooks.md#pre-query) /
|
|
167
170
|
[`post-query`](./hooks.md#post-query)) and the
|
|
168
171
|
[`[dirsql].hook-timeout`](./config.md#dirsql-keys) apply identically.
|
|
@@ -179,19 +179,48 @@ A path-table scan applies the same [`ignore`](/reference/config) patterns your
|
|
|
179
179
|
declared tables use, plus two built-in defaults so a zero-config
|
|
180
180
|
`SELECT * FROM './'` does not drown in machinery:
|
|
181
181
|
|
|
182
|
-
-
|
|
183
|
-
-
|
|
182
|
+
- `**/node_modules/**`
|
|
183
|
+
- `**/.git/**`
|
|
184
|
+
|
|
185
|
+
Both apply at any depth, so a `node_modules` nested inside a subdirectory is
|
|
186
|
+
skipped just like one at the top.
|
|
187
|
+
|
|
188
|
+
### `.gitignore`
|
|
189
|
+
|
|
190
|
+
Path-table scans also respect `.gitignore` files by default, the way fd and
|
|
191
|
+
ripgrep do: a `.gitignore` anywhere in the tree applies below its own
|
|
192
|
+
directory, deeper files override shallower ones, `!pattern` re-includes, and
|
|
193
|
+
an ignored directory is pruned rather than walked. In a typical repo this
|
|
194
|
+
excludes build output, virtualenvs, and caches with zero ceremony. No `.git`
|
|
195
|
+
directory is required — a `.gitignore` in any scanned directory counts — and
|
|
196
|
+
the built-in defaults above remain as a floor for directories with no
|
|
197
|
+
`.gitignore` at all.
|
|
198
|
+
|
|
199
|
+
Pass [`--no-ignore`](./cli.md#flags) to restore the full walk — the
|
|
200
|
+
determinism switch for scripted use, since results otherwise depend on
|
|
201
|
+
`.gitignore` state. It disables only the `.gitignore` respect; the built-in
|
|
202
|
+
defaults and configured `ignore` patterns still apply.
|
|
203
|
+
|
|
204
|
+
### Naming a skipped directory
|
|
184
205
|
|
|
185
206
|
Skip rules are judged on the part of the path *below* what you named outright,
|
|
186
|
-
so pointing at a skipped directory still scans it:
|
|
207
|
+
so pointing at a skipped directory — built-in or gitignored — still scans it:
|
|
187
208
|
|
|
188
209
|
```sql
|
|
189
210
|
SELECT path FROM './'; -- no node_modules rows
|
|
190
211
|
SELECT path FROM './node_modules/*/package.json'; -- scans it anyway
|
|
212
|
+
SELECT path FROM './dist'; -- scans dist/ even when gitignored
|
|
191
213
|
```
|
|
192
214
|
|
|
193
|
-
|
|
194
|
-
|
|
215
|
+
A `.gitignore` at or below the directory you named still filters beneath it;
|
|
216
|
+
only rules inherited from above it are set aside.
|
|
217
|
+
|
|
218
|
+
### Hidden files
|
|
219
|
+
|
|
220
|
+
Dotfiles are ordinary files: `'./'` and `'./*'` include them, with or without
|
|
221
|
+
`--no-ignore`. This is a deliberate divergence from fd/ripgrep — querying
|
|
222
|
+
dotfile directories (`.claude/`, …) is a first-class `dirsql` use case. Add an
|
|
223
|
+
`ignore` pattern if you would rather not see them.
|
|
195
224
|
|
|
196
225
|
## Joining against declared tables
|
|
197
226
|
|
|
@@ -55,6 +55,9 @@ clap = { version = "4", features = ["derive"], optional = true }
|
|
|
55
55
|
futures = { version = "0.3", optional = true }
|
|
56
56
|
futures-channel.workspace = true
|
|
57
57
|
globset = "0.4"
|
|
58
|
+
# Hierarchical `.gitignore` matching for path-table scans (the fd/ripgrep
|
|
59
|
+
# semantics), without adopting its walker: the scan keeps `walkdir`.
|
|
60
|
+
ignore = "0.4"
|
|
58
61
|
notify = "7"
|
|
59
62
|
rusqlite = { version = "0.34", features = ["bundled", "load_extension", "hooks", "vtab"] }
|
|
60
63
|
serde.workspace = true
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
**Changed** Path-table scans (`SELECT ... FROM './'`) now respect
|
|
2
|
+
`.gitignore` files by default, the way fd/ripgrep do: a `.gitignore` anywhere
|
|
3
|
+
in the tree applies below its own directory (hierarchically, `!pattern`
|
|
4
|
+
re-includes), and ignored directories are pruned rather than walked. No
|
|
5
|
+
`.git` directory is required. Hidden files are still scanned (deliberate
|
|
6
|
+
divergence from fd/rg), the built-in `node_modules`/`.git` defaults remain as
|
|
7
|
+
a floor, and naming a gitignored directory outright (`FROM './dist'`) still
|
|
8
|
+
scans it. The new CLI flag `--no-ignore` and Rust builder option
|
|
9
|
+
`DirSQLBuilder::no_ignore(bool)` restore the full walk. (#742)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
**Fixed**
|
|
2
|
+
|
|
3
|
+
- **Path-table scans now skip `node_modules` and `.git` at any depth.** The
|
|
4
|
+
built-in `DEFAULT_IGNORES` were anchored at the table root
|
|
5
|
+
(`node_modules/**`, `.git/**`), so nested occurrences such as
|
|
6
|
+
`presentations/foo/node_modules/...` leaked into `SELECT ... FROM './'`
|
|
7
|
+
results. The defaults are now `**/node_modules/**` and `**/.git/**`, and
|
|
8
|
+
the directory walker prunes wholly-ignored directories during traversal
|
|
9
|
+
instead of filtering after the walk, so an ignored tree is never read at
|
|
10
|
+
all. Naming a skipped directory outright (e.g.
|
|
11
|
+
`FROM './apps/site/node_modules'`) still scans it, at any depth. (#741)
|
|
@@ -69,6 +69,7 @@ Config flags are subcommand-local: pass them after `server`
|
|
|
69
69
|
| `--host <addr>` | `localhost` | Bind address. |
|
|
70
70
|
| `--port <n>` | `7117` | TCP port to bind. |
|
|
71
71
|
| `--persist [<path>]` | off | Keep the SQLite index on disk between runs so a restart only re-parses files that actually changed. Bare `--persist` caches at `<root>/.dirsql/cache.db`; `--persist <path>` caches at `<path>`. Off by default (the index is ephemeral). Also available on [`dirsql query`](#dirsql-query). See [Keep the index across restarts](../howto/persist.md). |
|
|
72
|
+
| `--no-ignore` | off | Scan files a `.gitignore` would hide. [Path-tables](./path-tables.md#skip-rules) respect `.gitignore` files by default; this flag restores the full walk. The built-in skips (`node_modules`/`.git`) and configured `ignore` patterns still apply. Also available on [`dirsql query`](#dirsql-query). |
|
|
72
73
|
| `--extension <path>` | none | Load a SQLite extension by literal path, overriding the config's `[[dirsql.extension]]` entries. Repeatable. Format: `<path>` or `<path>::<entrypoint>`. Internal plumbing for the pip/npm launchers, which resolve package-name extensions and pass the resolved paths here — not intended for direct use. When any `--extension` is present, the config file's own extension entries are not loaded. |
|
|
73
74
|
| `--version` | | Print the version and exit. |
|
|
74
75
|
| `--help` | | Print usage and exit. |
|
|
@@ -163,6 +164,8 @@ uses**, so behavior is identical to `POST /query` by construction:
|
|
|
163
164
|
on-disk cache. Because its value is optional, place a bare `--persist` after
|
|
164
165
|
the SQL (`dirsql query "SELECT …" --persist`) or use the `=` form
|
|
165
166
|
(`--persist=/path`) so it does not swallow the SQL argument.
|
|
167
|
+
- **`--no-ignore`** is honored: path-tables in the query scan files a
|
|
168
|
+
`.gitignore` would hide. See [Skip rules](./path-tables.md#skip-rules).
|
|
166
169
|
- **Hooks** ([`pre-query`](./hooks.md#pre-query) /
|
|
167
170
|
[`post-query`](./hooks.md#post-query)) and the
|
|
168
171
|
[`[dirsql].hook-timeout`](./config.md#dirsql-keys) apply identically.
|
|
@@ -179,19 +179,48 @@ A path-table scan applies the same [`ignore`](/reference/config) patterns your
|
|
|
179
179
|
declared tables use, plus two built-in defaults so a zero-config
|
|
180
180
|
`SELECT * FROM './'` does not drown in machinery:
|
|
181
181
|
|
|
182
|
-
-
|
|
183
|
-
-
|
|
182
|
+
- `**/node_modules/**`
|
|
183
|
+
- `**/.git/**`
|
|
184
|
+
|
|
185
|
+
Both apply at any depth, so a `node_modules` nested inside a subdirectory is
|
|
186
|
+
skipped just like one at the top.
|
|
187
|
+
|
|
188
|
+
### `.gitignore`
|
|
189
|
+
|
|
190
|
+
Path-table scans also respect `.gitignore` files by default, the way fd and
|
|
191
|
+
ripgrep do: a `.gitignore` anywhere in the tree applies below its own
|
|
192
|
+
directory, deeper files override shallower ones, `!pattern` re-includes, and
|
|
193
|
+
an ignored directory is pruned rather than walked. In a typical repo this
|
|
194
|
+
excludes build output, virtualenvs, and caches with zero ceremony. No `.git`
|
|
195
|
+
directory is required — a `.gitignore` in any scanned directory counts — and
|
|
196
|
+
the built-in defaults above remain as a floor for directories with no
|
|
197
|
+
`.gitignore` at all.
|
|
198
|
+
|
|
199
|
+
Pass [`--no-ignore`](./cli.md#flags) to restore the full walk — the
|
|
200
|
+
determinism switch for scripted use, since results otherwise depend on
|
|
201
|
+
`.gitignore` state. It disables only the `.gitignore` respect; the built-in
|
|
202
|
+
defaults and configured `ignore` patterns still apply.
|
|
203
|
+
|
|
204
|
+
### Naming a skipped directory
|
|
184
205
|
|
|
185
206
|
Skip rules are judged on the part of the path *below* what you named outright,
|
|
186
|
-
so pointing at a skipped directory still scans it:
|
|
207
|
+
so pointing at a skipped directory — built-in or gitignored — still scans it:
|
|
187
208
|
|
|
188
209
|
```sql
|
|
189
210
|
SELECT path FROM './'; -- no node_modules rows
|
|
190
211
|
SELECT path FROM './node_modules/*/package.json'; -- scans it anyway
|
|
212
|
+
SELECT path FROM './dist'; -- scans dist/ even when gitignored
|
|
191
213
|
```
|
|
192
214
|
|
|
193
|
-
|
|
194
|
-
|
|
215
|
+
A `.gitignore` at or below the directory you named still filters beneath it;
|
|
216
|
+
only rules inherited from above it are set aside.
|
|
217
|
+
|
|
218
|
+
### Hidden files
|
|
219
|
+
|
|
220
|
+
Dotfiles are ordinary files: `'./'` and `'./*'` include them, with or without
|
|
221
|
+
`--no-ignore`. This is a deliberate divergence from fd/ripgrep — querying
|
|
222
|
+
dotfile directories (`.claude/`, …) is a first-class `dirsql` use case. Add an
|
|
223
|
+
`ignore` pattern if you would rather not see them.
|
|
195
224
|
|
|
196
225
|
## Joining against declared tables
|
|
197
226
|
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
### Path-table scans respect `.gitignore` by default
|
|
2
|
+
|
|
3
|
+
#### Summary
|
|
4
|
+
|
|
5
|
+
Path-table scans (`SELECT ... FROM './'`, `FROM '/abs/**'`, and the `--on-file`
|
|
6
|
+
parsed form) now respect `.gitignore` files by default — hierarchically, with
|
|
7
|
+
traversal pruning, like fd/ripgrep — in the Rust core and therefore in the CLI
|
|
8
|
+
and every SDK binding. A query over a repository returns fewer rows than
|
|
9
|
+
before when `.gitignore` names files or directories in the scanned tree. No
|
|
10
|
+
API signature changed; the opt-out is the new CLI flag `--no-ignore` and Rust
|
|
11
|
+
builder option `DirSQLBuilder::no_ignore(bool)`. Declared (config) tables are
|
|
12
|
+
unaffected.
|
|
13
|
+
|
|
14
|
+
#### Required changes
|
|
15
|
+
|
|
16
|
+
_None required for code._ To keep the previous full-walk behavior for a
|
|
17
|
+
path-table query:
|
|
18
|
+
|
|
19
|
+
| Surface | Before | After |
|
|
20
|
+
| ------- | ------ | ----- |
|
|
21
|
+
| CLI | `dirsql "SELECT * FROM './'"` (scanned gitignored files) | `dirsql "SELECT * FROM './'" --no-ignore` |
|
|
22
|
+
| Rust SDK | `DirSQL::builder().root(r).build()` (scanned gitignored files) | `DirSQL::builder().root(r).no_ignore(true).build()` |
|
|
23
|
+
|
|
24
|
+
#### Deprecations removed
|
|
25
|
+
|
|
26
|
+
_None._
|
|
27
|
+
|
|
28
|
+
#### Behavior changes without code changes
|
|
29
|
+
|
|
30
|
+
- Path-table scans: previously `.gitignore` files were not consulted, so
|
|
31
|
+
gitignored files (build output, virtualenvs, caches) appeared as rows; now
|
|
32
|
+
any `.gitignore` in the scanned tree excludes its matches below its own
|
|
33
|
+
directory and ignored directories are pruned. Row counts over repositories
|
|
34
|
+
shrink accordingly.
|
|
35
|
+
- Unchanged, for scoping: hidden files are still scanned; the built-in
|
|
36
|
+
`**/node_modules/**` / `**/.git/**` defaults and configured `ignore`
|
|
37
|
+
patterns still apply (also under `--no-ignore`); naming an ignored
|
|
38
|
+
directory outright (`FROM './dist'`) still scans it; declared tables and
|
|
39
|
+
watch events are not affected.
|
|
40
|
+
|
|
41
|
+
#### Verification
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
mkdir -p /tmp/dirsql-gitignore-check/dist
|
|
45
|
+
printf 'dist/\n' > /tmp/dirsql-gitignore-check/.gitignore
|
|
46
|
+
touch /tmp/dirsql-gitignore-check/dist/bundle.js /tmp/dirsql-gitignore-check/app.js
|
|
47
|
+
cd /tmp/dirsql-gitignore-check
|
|
48
|
+
dirsql "SELECT path FROM './' ORDER BY path"
|
|
49
|
+
# expected: [{"path":".gitignore"},{"path":"app.js"}]
|
|
50
|
+
dirsql "SELECT path FROM './' ORDER BY path" --no-ignore
|
|
51
|
+
# expected: [{"path":".gitignore"},{"path":"app.js"},{"path":"dist/bundle.js"}]
|
|
52
|
+
```
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
### Default path-table ignores apply at any depth (#741)
|
|
2
|
+
|
|
3
|
+
#### Summary
|
|
4
|
+
|
|
5
|
+
The built-in path-table skip rules were anchored at the table root
|
|
6
|
+
(`node_modules/**`, `.git/**`), so a `node_modules` or `.git` nested below a
|
|
7
|
+
subdirectory leaked into path-table query results. The defaults are now
|
|
8
|
+
`**/node_modules/**` and `**/.git/**`, matching at any depth (globset's
|
|
9
|
+
`**/foo` also matches a top-level `foo`, so root-level behavior is
|
|
10
|
+
unchanged). No API signature changes — this changes query results only.
|
|
11
|
+
|
|
12
|
+
#### Required changes
|
|
13
|
+
|
|
14
|
+
_None._
|
|
15
|
+
|
|
16
|
+
#### Deprecations removed
|
|
17
|
+
|
|
18
|
+
_None._
|
|
19
|
+
|
|
20
|
+
#### Behavior changes without code changes
|
|
21
|
+
|
|
22
|
+
- Path-table scans (`FROM './'`, `FROM './dir'`, absolute and `~/` forms):
|
|
23
|
+
previously files under a *nested* `node_modules/` or `.git/` (e.g.
|
|
24
|
+
`apps/site/node_modules/pkg/index.js`) appeared in results; now they are
|
|
25
|
+
skipped like their top-level counterparts. Queries that relied on nested
|
|
26
|
+
`node_modules`/`.git` contents surfacing implicitly must name the
|
|
27
|
+
directory outright (`FROM './apps/site/node_modules'`), which still scans
|
|
28
|
+
it — the skip rules continue to apply only beneath the literal path you
|
|
29
|
+
write.
|
|
30
|
+
- The walker now prunes wholly-ignored directories during traversal instead
|
|
31
|
+
of filtering matches afterwards, so ignored trees are no longer read at
|
|
32
|
+
all. Results are identical apart from the nested-skip fix; large ignored
|
|
33
|
+
trees simply scan faster.
|
|
34
|
+
|
|
35
|
+
#### Verification
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
mkdir -p /tmp/d741/sub/node_modules
|
|
39
|
+
echo x > /tmp/d741/sub/node_modules/x.txt
|
|
40
|
+
echo y > /tmp/d741/sub/real.txt
|
|
41
|
+
cd /tmp/d741
|
|
42
|
+
dirsql "SELECT path FROM './'"
|
|
43
|
+
# expected: [{"path":"sub/real.txt"}] (no node_modules row)
|
|
44
|
+
dirsql "SELECT path FROM './sub/node_modules'"
|
|
45
|
+
# expected: [{"path":"sub/node_modules/x.txt"}] (named outright, still scans)
|
|
46
|
+
```
|
|
@@ -113,17 +113,24 @@ struct ConfigArgs {
|
|
|
113
113
|
/// Off by default (ephemeral index).
|
|
114
114
|
#[arg(long, num_args = 0..=1)]
|
|
115
115
|
persist: Option<Option<PathBuf>>,
|
|
116
|
+
|
|
117
|
+
/// Scan files a `.gitignore` would hide. Path-tables respect `.gitignore`
|
|
118
|
+
/// files by default (hierarchically, like fd/ripgrep); this flag restores
|
|
119
|
+
/// the full walk. The built-in skips (`node_modules`/`.git`) and any
|
|
120
|
+
/// configured `ignore` patterns still apply.
|
|
121
|
+
#[arg(long = "no-ignore")]
|
|
122
|
+
no_ignore: bool,
|
|
116
123
|
}
|
|
117
124
|
|
|
118
125
|
impl ConfigArgs {
|
|
119
|
-
/// Apply the
|
|
120
|
-
/// bare `--persist` →
|
|
121
|
-
/// →
|
|
122
|
-
fn
|
|
126
|
+
/// Apply the index-shaping flags to a builder: `--persist [PATH]` (absent
|
|
127
|
+
/// → no change; bare `--persist` → the default location; `--persist
|
|
128
|
+
/// <path>` → that path) and `--no-ignore`.
|
|
129
|
+
fn apply_index_flags(&self, mut builder: dirsql::DirSQLBuilder) -> dirsql::DirSQLBuilder {
|
|
123
130
|
if let Some(path) = &self.persist {
|
|
124
131
|
builder = builder.persist(path.as_ref());
|
|
125
132
|
}
|
|
126
|
-
builder
|
|
133
|
+
builder.no_ignore(self.no_ignore)
|
|
127
134
|
}
|
|
128
135
|
|
|
129
136
|
/// The config paths passed via `-c`/`--config`. Empty when none were given
|
|
@@ -460,7 +467,7 @@ fn load_state(cfg: &ConfigArgs, path_table_parser: Option<String>) -> AppState {
|
|
|
460
467
|
.extensions(parse_extension_specs(&cfg.extension))
|
|
461
468
|
.suppress_config_extensions(true);
|
|
462
469
|
}
|
|
463
|
-
builder = cfg.
|
|
470
|
+
builder = cfg.apply_index_flags(builder);
|
|
464
471
|
// `--on-file` touches path-tables only: config `[[table]]` definitions keep
|
|
465
472
|
// their own `on-file` hooks; a path-table named in the query gets this
|
|
466
473
|
// parser regardless of any `-c`.
|
|
@@ -573,7 +580,7 @@ fn load_configless_state(cfg: &ConfigArgs, path_table_parser: Option<String>) ->
|
|
|
573
580
|
}
|
|
574
581
|
};
|
|
575
582
|
|
|
576
|
-
let mut builder = cfg.
|
|
583
|
+
let mut builder = cfg.apply_index_flags(DirSQL::builder().root(root));
|
|
577
584
|
if let Some(command) = path_table_parser {
|
|
578
585
|
builder = builder.path_table_parser(command);
|
|
579
586
|
}
|
|
@@ -823,6 +830,23 @@ mod tests {
|
|
|
823
830
|
);
|
|
824
831
|
}
|
|
825
832
|
|
|
833
|
+
#[test]
|
|
834
|
+
fn no_ignore_flag_defaults_false() {
|
|
835
|
+
let cli = Cli::parse_from(["dirsql"]);
|
|
836
|
+
assert!(!cli.common.no_ignore);
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
#[test]
|
|
840
|
+
fn no_ignore_flag_sets_true_in_the_default_query_mode() {
|
|
841
|
+
let cli = Cli::parse_from(["dirsql", "SELECT 1", "--no-ignore"]);
|
|
842
|
+
assert!(cli.common.no_ignore);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
#[test]
|
|
846
|
+
fn no_ignore_flag_parses_after_the_query_subcommand() {
|
|
847
|
+
assert!(query_common(&["dirsql", "query", "SELECT 1", "--no-ignore"]).no_ignore);
|
|
848
|
+
}
|
|
849
|
+
|
|
826
850
|
#[test]
|
|
827
851
|
fn persist_flag_parses_after_the_query_subcommand() {
|
|
828
852
|
// Subcommand-local (#609); the flag sits after the positional SQL to
|