dirsql 0.4.105__tar.gz → 0.4.106__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.105 → dirsql-0.4.106}/Cargo.lock +2 -2
- {dirsql-0.4.105 → dirsql-0.4.106}/PKG-INFO +1 -1
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/Cargo.toml +1 -1
- dirsql-0.4.106/packages/python/e2e-attestations/bot-1459-rescan-on-overflow-1008.json +7 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/Cargo.toml +1 -1
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/db.rs +52 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/lib.rs +155 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/watcher.rs +35 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/Cargo.toml +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/README.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/__init__.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/_async.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/_dirsql.pyi +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/__init__.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/discover_plugins/__init__.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/main.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/resolve_config_extensions.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/plan_entry_path.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/py.typed +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/read_config.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/resolve_configs_extension_specs.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/resolve_extension.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/resolve_package.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/AGENTS.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/context/.gitattributes +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/context/recipes.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/context/usage.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/explanation.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/getting-started.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/embed.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/persist.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/query-json.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/index.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/package.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/plugins.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/cli.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/columns.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/config.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/glob.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/hooks.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/http-api.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/sdk.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/CHANGELOG.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/MIGRATIONS.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/README.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-braces.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-directory.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-dotnames.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-gitignore.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-links.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-bracket-slash-literal.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-dotdot-as-written.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-glob-walks-node-modules.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-literal-gitignore.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-on-file-ndjson.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-parallel-hooks.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-persist-cache-outside-root.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-posix-classes-unicode.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-spread-few-large-files.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/README.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/conftest.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/AGENTS.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/context/.gitattributes +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/context/recipes.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/context/usage.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/explanation.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/getting-started.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/embed.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/persist.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/query-json.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/index.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/package.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/plugins.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/cli.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/columns.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/config.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/glob.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/hooks.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/http-api.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/sdk.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1334-listing-exemptions.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1414-stat-speed.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1415-server-speed.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1418-node-modules.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1419-dotdot-slashes.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1420-bracket-slash.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1421-posix-unicode.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1422-literal-gitignore.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1426-walk-spawn-threshold-1008.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1428-ndjson-hooks.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1429-parallel-hooks.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1430-dotdot-as-written.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1431-persist-cache-dir.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1437-test-cache-isolation.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1440-fix-main-build.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1448-wildcard-ignored-prefix.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1451-named-dir-never-hidden.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1454-split-few-files.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1457-incremental-refresh-1008.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-fix-main-place-depth-20261007.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-config-braces.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-config-directory.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-config-dotnames.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-config-gitignore.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-config-links.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-braces.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-directory.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-dotnames.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-gitignore.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-links.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-bracket-slash-literal.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-dotdot-as-written.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-glob-walks-node-modules.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-literal-gitignore.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-on-file-ndjson.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-parallel-hooks.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-persist-cache-outside-root.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-posix-classes-unicode.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-spread-few-large-files.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/README.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/src/lib.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/testing-conventions.toml +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/__init__.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/conftest.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/e2e/__init__.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/e2e/speed_of_light.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/integration/__init__.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/integration/binding/__init__.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/integration/hermetic/__init__.py +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/CHANGELOG.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/MIGRATIONS.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/README.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/benches/db_bench.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/benches/differ_bench.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/benches/matcher_bench.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/benches/scanner_bench.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/context/.gitattributes +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/context/recipes.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/context/usage.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/explanation.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/getting-started.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/embed.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/persist.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/query-json.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/index.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/plugins.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/cli.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/columns.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/config.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/glob.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/hooks.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/http-api.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/sdk.md +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/bin/dirsql.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/brace.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/context.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/execute.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/init.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/mod.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/repl.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/router.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/run.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/serialize.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/server.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/table.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/command.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/config.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/default_config.toml +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/differ.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/extension_resolution.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/functions.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/infer.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/launcher.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/listing.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/matcher.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/on_file.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/parsed_vtab.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/path_table.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/persist.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/posix_class.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/progress.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/row_event_flat.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/scanner.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/sql_literal.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/tree_walk.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/vtab.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/vtab_scaffold.rs +0 -0
- {dirsql-0.4.105 → dirsql-0.4.106}/pyproject.toml +0 -0
|
@@ -573,7 +573,7 @@ dependencies = [
|
|
|
573
573
|
|
|
574
574
|
[[package]]
|
|
575
575
|
name = "dirsql"
|
|
576
|
-
version = "0.4.
|
|
576
|
+
version = "0.4.106"
|
|
577
577
|
dependencies = [
|
|
578
578
|
"assert_cmd",
|
|
579
579
|
"axum",
|
|
@@ -625,7 +625,7 @@ dependencies = [
|
|
|
625
625
|
|
|
626
626
|
[[package]]
|
|
627
627
|
name = "dirsql-py-ext"
|
|
628
|
-
version = "0.4.
|
|
628
|
+
version = "0.4.106"
|
|
629
629
|
dependencies = [
|
|
630
630
|
"dirsql",
|
|
631
631
|
"pyo3",
|
|
@@ -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.106"
|
|
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
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"command": "uv run python -m pytest tests/e2e/on_file_query_test.py tests/e2e/query_contract_test.py tests/e2e/use_case_notebook_test.py -x -q",
|
|
3
|
+
"ran_at": 1791464863,
|
|
4
|
+
"exit_code": 0,
|
|
5
|
+
"commit": "480d3e491818207f55eb2d8dc6c95498dc27afab",
|
|
6
|
+
"branch": "bot/1459-rescan-on-overflow-1008"
|
|
7
|
+
}
|
|
@@ -6,7 +6,7 @@ description = "Ephemeral SQL index over a local directory"
|
|
|
6
6
|
# version stays for the binding crates (publish = false). The literal
|
|
7
7
|
# intentionally lags the published version: putitoutthere rewrites it to
|
|
8
8
|
# the planned release version at build time and never commits it back.
|
|
9
|
-
version = "0.4.
|
|
9
|
+
version = "0.4.106"
|
|
10
10
|
edition.workspace = true
|
|
11
11
|
# Literal `license` (not `license.workspace = true`) because
|
|
12
12
|
# putitoutthere's preflight check reads `[package].license` directly
|
|
@@ -991,6 +991,22 @@ impl Db {
|
|
|
991
991
|
.collect()
|
|
992
992
|
}
|
|
993
993
|
|
|
994
|
+
/// Every distinct `(table_name, file_path)` that owns rows, ordered by
|
|
995
|
+
/// table then path. A per-table hook's rows have no file owner and are
|
|
996
|
+
/// not listed.
|
|
997
|
+
pub fn owned_files(&self) -> Result<Vec<(String, String)>> {
|
|
998
|
+
let mut stmt = self.conn.prepare(
|
|
999
|
+
"SELECT DISTINCT table_name, file_path FROM ( \
|
|
1000
|
+
SELECT table_name, file_path FROM _dirsql_internal_rows \
|
|
1001
|
+
UNION ALL \
|
|
1002
|
+
SELECT table_name, file_path FROM _dirsql_internal_ranges) \
|
|
1003
|
+
WHERE file_path != '' \
|
|
1004
|
+
ORDER BY table_name, file_path",
|
|
1005
|
+
)?;
|
|
1006
|
+
let rows = stmt.query_map([], |r| Ok((r.get(0)?, r.get(1)?)))?;
|
|
1007
|
+
Ok(rows.collect::<rusqlite::Result<Vec<_>>>()?)
|
|
1008
|
+
}
|
|
1009
|
+
|
|
994
1010
|
/// Every distinct `(table_name, file_path)` whose file sits beneath the
|
|
995
1011
|
/// directory `dir`, ordered by table then path.
|
|
996
1012
|
pub fn files_under(&self, dir: &str) -> Result<Vec<(String, String)>> {
|
|
@@ -2496,6 +2512,42 @@ mod tests {
|
|
|
2496
2512
|
assert!(db.files_under("nothing").unwrap().is_empty());
|
|
2497
2513
|
}
|
|
2498
2514
|
|
|
2515
|
+
#[test]
|
|
2516
|
+
fn owned_files_lists_each_file_once_and_skips_the_batch_owner() {
|
|
2517
|
+
let db = Db::new().unwrap();
|
|
2518
|
+
db.create_table("t1", "CREATE TABLE t1 (id TEXT)").unwrap();
|
|
2519
|
+
db.create_table("t2", "CREATE TABLE t2 (id TEXT)").unwrap();
|
|
2520
|
+
let row = HashMap::from([("id".into(), Value::Text("x".into()))]);
|
|
2521
|
+
for (table, file, idx) in [
|
|
2522
|
+
("t2", "c.jsonl", 0),
|
|
2523
|
+
("t1", "a.jsonl", 0),
|
|
2524
|
+
("t1", "a.jsonl", 1),
|
|
2525
|
+
("t1", "d/b.jsonl", 0),
|
|
2526
|
+
("t1", "", 0),
|
|
2527
|
+
] {
|
|
2528
|
+
db.insert_row(table, &row, file, idx).unwrap();
|
|
2529
|
+
}
|
|
2530
|
+
|
|
2531
|
+
assert_eq!(
|
|
2532
|
+
db.owned_files().unwrap(),
|
|
2533
|
+
vec![
|
|
2534
|
+
("t1".to_string(), "a.jsonl".to_string()),
|
|
2535
|
+
("t1".to_string(), "d/b.jsonl".to_string()),
|
|
2536
|
+
("t2".to_string(), "c.jsonl".to_string()),
|
|
2537
|
+
]
|
|
2538
|
+
);
|
|
2539
|
+
}
|
|
2540
|
+
|
|
2541
|
+
#[test]
|
|
2542
|
+
fn owned_files_surfaces_sql_failure() {
|
|
2543
|
+
let db = Db::new().unwrap();
|
|
2544
|
+
db.conn
|
|
2545
|
+
.execute("DROP TABLE _dirsql_internal_rows", [])
|
|
2546
|
+
.unwrap();
|
|
2547
|
+
let err = db.owned_files().unwrap_err();
|
|
2548
|
+
assert!(matches!(err, DbError::Sqlite(_)), "got: {err:?}");
|
|
2549
|
+
}
|
|
2550
|
+
|
|
2499
2551
|
#[test]
|
|
2500
2552
|
fn files_under_surfaces_sql_failure() {
|
|
2501
2553
|
let db = Db::new().unwrap();
|
|
@@ -658,9 +658,17 @@ impl DirSQL {
|
|
|
658
658
|
pub fn apply_file_events(&self, events: Vec<FileEvent>) -> Vec<RowEvent> {
|
|
659
659
|
let mut pending = PendingRefresh::default();
|
|
660
660
|
let mut out = Vec::new();
|
|
661
|
+
let mut rescan = false;
|
|
661
662
|
for fe in events {
|
|
663
|
+
if fe == FileEvent::Rescan {
|
|
664
|
+
rescan = true;
|
|
665
|
+
continue;
|
|
666
|
+
}
|
|
662
667
|
out.extend(self.route_file_event(fe, &mut pending));
|
|
663
668
|
}
|
|
669
|
+
if rescan {
|
|
670
|
+
out.extend(self.rescan(&mut pending));
|
|
671
|
+
}
|
|
664
672
|
out.extend(self.refresh_pending(pending));
|
|
665
673
|
out
|
|
666
674
|
}
|
|
@@ -718,6 +726,7 @@ impl DirSQL {
|
|
|
718
726
|
fn route_file_event(&self, event: FileEvent, pending: &mut PendingRefresh) -> Vec<RowEvent> {
|
|
719
727
|
let abs_path = match &event {
|
|
720
728
|
FileEvent::Created(p) | FileEvent::Modified(p) | FileEvent::Deleted(p) => p.clone(),
|
|
729
|
+
FileEvent::Rescan => return Vec::new(),
|
|
721
730
|
};
|
|
722
731
|
let mut events = Vec::new();
|
|
723
732
|
for (group, rel_path_buf) in self.groups_containing(&abs_path) {
|
|
@@ -767,6 +776,7 @@ impl DirSQL {
|
|
|
767
776
|
FileEvent::Created(_) | FileEvent::Modified(_) => {
|
|
768
777
|
events.extend(self.handle_upsert(&m.table_name, &abs_path, &rel_path));
|
|
769
778
|
}
|
|
779
|
+
FileEvent::Rescan => {}
|
|
770
780
|
}
|
|
771
781
|
}
|
|
772
782
|
// The mirror of the walk above: a directory that leaves the tree
|
|
@@ -931,6 +941,43 @@ impl DirSQL {
|
|
|
931
941
|
events
|
|
932
942
|
}
|
|
933
943
|
|
|
944
|
+
/// Reconcile every table with the tree after the OS dropped events: walk
|
|
945
|
+
/// each group's root again, drop the rows of files that are gone, re-read
|
|
946
|
+
/// the files that are there, and rebuild each per-table hook's file list.
|
|
947
|
+
fn rescan(&self, pending: &mut PendingRefresh) -> Vec<RowEvent> {
|
|
948
|
+
let owned = match self.inner.db.lock() {
|
|
949
|
+
Ok(db) => db.owned_files(),
|
|
950
|
+
Err(e) => return vec![error_event(None, "", e.to_string())],
|
|
951
|
+
};
|
|
952
|
+
let owned = match owned {
|
|
953
|
+
Ok(owned) => owned,
|
|
954
|
+
Err(e) => return vec![error_event(None, "", e.to_string())],
|
|
955
|
+
};
|
|
956
|
+
let mut events = Vec::new();
|
|
957
|
+
for group in &self.inner.groups {
|
|
958
|
+
let in_group = |table: &str| group.tables.iter().any(|name| name == table);
|
|
959
|
+
for (table, file_path) in &owned {
|
|
960
|
+
if in_group(table)
|
|
961
|
+
&& !self
|
|
962
|
+
.inner
|
|
963
|
+
.fs
|
|
964
|
+
.is_file(&group.watch_anchor.join(file_path))
|
|
965
|
+
.unwrap_or(false)
|
|
966
|
+
{
|
|
967
|
+
events.extend(self.handle_delete(table, file_path));
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
for table in group.tables.iter().filter(|table| self.is_per_table(table)) {
|
|
971
|
+
if let Ok(mut batch_files) = self.inner.batch_files.lock() {
|
|
972
|
+
batch_files.remove(table);
|
|
973
|
+
}
|
|
974
|
+
pending.mark(table, ".");
|
|
975
|
+
}
|
|
976
|
+
events.extend(self.index_subtree(group, &group.watch_anchor, pending));
|
|
977
|
+
}
|
|
978
|
+
events
|
|
979
|
+
}
|
|
980
|
+
|
|
934
981
|
/// Index every file beneath `dir` as if each had its own create event,
|
|
935
982
|
/// using the scanner's walk so the watch path and the initial scan share
|
|
936
983
|
/// one definition of what counts as a row.
|
|
@@ -5563,6 +5610,114 @@ mod internal_tests {
|
|
|
5563
5610
|
assert_eq!(row_names(&db), Vec::<String>::new());
|
|
5564
5611
|
}
|
|
5565
5612
|
|
|
5613
|
+
fn rescan_fixture(per_table: bool) -> (TempDir, PathBuf, DirSQL, Calls) {
|
|
5614
|
+
let dir = TempDir::new().unwrap();
|
|
5615
|
+
let root = dir.path().canonicalize().unwrap();
|
|
5616
|
+
let (items, calls) = recording_per_table("items", "**/*.txt");
|
|
5617
|
+
let table = if per_table {
|
|
5618
|
+
items
|
|
5619
|
+
} else {
|
|
5620
|
+
Table::new(
|
|
5621
|
+
"items",
|
|
5622
|
+
"CREATE TABLE items (name TEXT)",
|
|
5623
|
+
"**/*.txt",
|
|
5624
|
+
|path| {
|
|
5625
|
+
vec![Row::from_iter([(
|
|
5626
|
+
"name".to_string(),
|
|
5627
|
+
Value::Text(
|
|
5628
|
+
Path::new(path)
|
|
5629
|
+
.file_name()
|
|
5630
|
+
.unwrap()
|
|
5631
|
+
.to_string_lossy()
|
|
5632
|
+
.into_owned(),
|
|
5633
|
+
),
|
|
5634
|
+
)])]
|
|
5635
|
+
},
|
|
5636
|
+
)
|
|
5637
|
+
};
|
|
5638
|
+
let db =
|
|
5639
|
+
DirSQL::with_ignore_and_fs(&root, vec![table], Vec::<String>::new(), Arc::new(RealFs))
|
|
5640
|
+
.unwrap();
|
|
5641
|
+
for rel in ["a.txt", "sub/b.txt"] {
|
|
5642
|
+
let path = root.join(rel);
|
|
5643
|
+
std::fs::create_dir_all(path.parent().unwrap()).unwrap();
|
|
5644
|
+
std::fs::write(&path, "x").unwrap();
|
|
5645
|
+
db.apply_file_events(vec![FileEvent::Created(path)]);
|
|
5646
|
+
}
|
|
5647
|
+
(dir, root, db, calls)
|
|
5648
|
+
}
|
|
5649
|
+
|
|
5650
|
+
fn drift(root: &Path) {
|
|
5651
|
+
std::fs::remove_file(root.join("a.txt")).unwrap();
|
|
5652
|
+
std::fs::write(root.join("sub/c.txt"), "x").unwrap();
|
|
5653
|
+
std::fs::write(root.join("d.txt"), "x").unwrap();
|
|
5654
|
+
}
|
|
5655
|
+
|
|
5656
|
+
fn name_of(row: &Row) -> String {
|
|
5657
|
+
match &row["name"] {
|
|
5658
|
+
Value::Text(n) => n.clone(),
|
|
5659
|
+
other => format!("{other:?}"),
|
|
5660
|
+
}
|
|
5661
|
+
}
|
|
5662
|
+
|
|
5663
|
+
fn rescan_summary(events: &[RowEvent]) -> Vec<String> {
|
|
5664
|
+
let mut out: Vec<String> = events
|
|
5665
|
+
.iter()
|
|
5666
|
+
.map(|event| match event {
|
|
5667
|
+
RowEvent::Insert { row, .. } => format!("insert {}", name_of(row)),
|
|
5668
|
+
RowEvent::Delete { row, .. } => format!("delete {}", name_of(row)),
|
|
5669
|
+
other => format!("{other:?}"),
|
|
5670
|
+
})
|
|
5671
|
+
.collect();
|
|
5672
|
+
out.sort();
|
|
5673
|
+
out
|
|
5674
|
+
}
|
|
5675
|
+
|
|
5676
|
+
#[test]
|
|
5677
|
+
fn a_rescan_reconciles_a_per_file_table_with_the_tree() {
|
|
5678
|
+
let (_dir, root, db, _) = rescan_fixture(false);
|
|
5679
|
+
drift(&root);
|
|
5680
|
+
|
|
5681
|
+
let events = db.apply_file_events(vec![FileEvent::Rescan]);
|
|
5682
|
+
|
|
5683
|
+
assert_eq!(
|
|
5684
|
+
rescan_summary(&events),
|
|
5685
|
+
vec!["delete a.txt", "insert c.txt", "insert d.txt"]
|
|
5686
|
+
);
|
|
5687
|
+
assert_eq!(row_names(&db), vec!["b.txt", "c.txt", "d.txt"]);
|
|
5688
|
+
}
|
|
5689
|
+
|
|
5690
|
+
#[test]
|
|
5691
|
+
fn a_rescan_rebuilds_a_per_table_hooks_files_and_reconciles_its_rows() {
|
|
5692
|
+
let (_dir, root, db, calls) = rescan_fixture(true);
|
|
5693
|
+
drift(&root);
|
|
5694
|
+
|
|
5695
|
+
let events = db.apply_file_events(vec![FileEvent::Rescan]);
|
|
5696
|
+
|
|
5697
|
+
assert_eq!(
|
|
5698
|
+
calls.lock().unwrap().last().unwrap(),
|
|
5699
|
+
&vec![
|
|
5700
|
+
root.join("d.txt"),
|
|
5701
|
+
root.join("sub/b.txt"),
|
|
5702
|
+
root.join("sub/c.txt")
|
|
5703
|
+
]
|
|
5704
|
+
);
|
|
5705
|
+
assert_eq!(
|
|
5706
|
+
rescan_summary(&events),
|
|
5707
|
+
vec![
|
|
5708
|
+
"Update { table: \"items\", old_row: {\"name\": Text(\"a.txt\")}, new_row: {\"name\": Text(\"d.txt\")}, file_path: \".\" }",
|
|
5709
|
+
"insert c.txt"
|
|
5710
|
+
]
|
|
5711
|
+
);
|
|
5712
|
+
assert_eq!(row_names(&db), vec!["b.txt", "c.txt", "d.txt"]);
|
|
5713
|
+
}
|
|
5714
|
+
|
|
5715
|
+
#[test]
|
|
5716
|
+
fn a_rescan_of_a_tree_that_did_not_drift_emits_nothing() {
|
|
5717
|
+
let (_dir, _root, db, _) = rescan_fixture(false);
|
|
5718
|
+
assert_eq!(db.apply_file_events(vec![FileEvent::Rescan]), vec![]);
|
|
5719
|
+
}
|
|
5720
|
+
|
|
5566
5721
|
fn anchored_table(name: &str, glob: &str, anchor: &str) -> Table {
|
|
5567
5722
|
Table::new(
|
|
5568
5723
|
name,
|
|
@@ -19,6 +19,9 @@ pub enum FileEvent {
|
|
|
19
19
|
Created(PathBuf),
|
|
20
20
|
Modified(PathBuf),
|
|
21
21
|
Deleted(PathBuf),
|
|
22
|
+
/// The OS dropped events (an inotify queue overflow); the index may have
|
|
23
|
+
/// diverged from disk and must be rebuilt from a walk.
|
|
24
|
+
Rescan,
|
|
22
25
|
}
|
|
23
26
|
|
|
24
27
|
/// A tree to watch, and the skip rules the scan applies within it.
|
|
@@ -151,6 +154,19 @@ fn forward(
|
|
|
151
154
|
let _ = tolerate_missing(watcher.watch(&dir, RecursiveMode::NonRecursive));
|
|
152
155
|
}
|
|
153
156
|
}
|
|
157
|
+
if fe == FileEvent::Rescan && PER_DIRECTORY {
|
|
158
|
+
let Some(watcher) = watcher.upgrade() else {
|
|
159
|
+
return;
|
|
160
|
+
};
|
|
161
|
+
let mut watcher = watcher.lock().expect("watching a directory does not panic");
|
|
162
|
+
// Directories created while events were being dropped have no
|
|
163
|
+
// watch yet.
|
|
164
|
+
for scope in scopes {
|
|
165
|
+
for dir in dirs_to_watch(scopes, &scope.root, &walk_scope) {
|
|
166
|
+
let _ = tolerate_missing(watcher.watch(&dir, RecursiveMode::NonRecursive));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
154
170
|
if tx.send(fe).is_err() {
|
|
155
171
|
return;
|
|
156
172
|
}
|
|
@@ -258,6 +274,10 @@ fn translate_event(event: &Event) -> Vec<FileEvent> {
|
|
|
258
274
|
}
|
|
259
275
|
}
|
|
260
276
|
|
|
277
|
+
if event.need_rescan() {
|
|
278
|
+
results.push(FileEvent::Rescan);
|
|
279
|
+
}
|
|
280
|
+
|
|
261
281
|
results
|
|
262
282
|
}
|
|
263
283
|
|
|
@@ -347,6 +367,16 @@ fn access_event(paths: Vec<PathBuf>) -> Event {
|
|
|
347
367
|
}
|
|
348
368
|
}
|
|
349
369
|
|
|
370
|
+
#[cfg(test)]
|
|
371
|
+
fn rescan_event() -> Event {
|
|
372
|
+
Event {
|
|
373
|
+
kind: EventKind::Other,
|
|
374
|
+
paths: Vec::new(),
|
|
375
|
+
attrs: Default::default(),
|
|
376
|
+
}
|
|
377
|
+
.set_flag(notify::event::Flag::Rescan)
|
|
378
|
+
}
|
|
379
|
+
|
|
350
380
|
#[cfg(test)]
|
|
351
381
|
fn io_error(raw_os_error: i32) -> notify::Error {
|
|
352
382
|
notify::Error::io(std::io::Error::from_raw_os_error(raw_os_error))
|
|
@@ -563,6 +593,11 @@ mod tests {
|
|
|
563
593
|
);
|
|
564
594
|
}
|
|
565
595
|
|
|
596
|
+
#[test]
|
|
597
|
+
fn translate_event_turns_a_rescan_flag_into_a_rescan() {
|
|
598
|
+
assert_eq!(translate_event(&rescan_event()), vec![FileEvent::Rescan]);
|
|
599
|
+
}
|
|
600
|
+
|
|
566
601
|
#[test]
|
|
567
602
|
fn translate_event_ignores_access_events() {
|
|
568
603
|
let results = translate_event(&access_event(vec![PathBuf::from("/tmp/read.txt")]));
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-plugin-discovery.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-repeatable-config.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-29-restore-python-310.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md
RENAMED
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md
RENAMED
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-03-python-no-ignore.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-20-declared-table-name.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-18-export-scan-failure.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-02-readme-docs-host.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md
RENAMED
|
File without changes
|
|
File without changes
|