dirsql 0.4.119__tar.gz → 0.4.120__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.119 → dirsql-0.4.120}/Cargo.lock +2 -2
- {dirsql-0.4.119 → dirsql-0.4.120}/PKG-INFO +1 -1
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/Cargo.toml +1 -1
- dirsql-0.4.120/packages/python/e2e-attestations/bot-1478-perdir-walk-1020.json +7 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/Cargo.toml +1 -1
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/tree_walk.rs +156 -29
- {dirsql-0.4.119 → dirsql-0.4.120}/Cargo.toml +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/README.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/__init__.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/_async.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/_dirsql.pyi +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/cli/__init__.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/cli/discover_plugins/__init__.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/cli/main.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/cli/resolve_config_extensions.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/plan_entry_path.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/py.typed +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/read_config.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/resolve_configs_extension_specs.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/resolve_extension.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/dirsql/resolve_package.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/AGENTS.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/context/.gitattributes +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/context/recipes.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/context/usage.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/explanation.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/getting-started.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/embed.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/persist.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/query-json.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/index.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/package.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/plugins.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/reference/cli.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/reference/columns.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/reference/config.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/reference/glob.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/reference/hooks.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/reference/http-api.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/reference/sdk.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/speed.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/docs/speed.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/CHANGELOG.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/MIGRATIONS.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/README.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-config-braces.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-config-directory.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-config-dotnames.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-config-gitignore.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-config-links.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-bracket-slash-literal.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-dotdot-as-written.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-glob-walks-node-modules.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-literal-gitignore.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-on-file-ndjson.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-parallel-hooks.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-persist-cache-outside-root.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-posix-classes-unicode.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-spread-few-large-files.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-08-watch-requires-named-table.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/README.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/conftest.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/AGENTS.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/context/.gitattributes +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/context/recipes.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/context/usage.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/explanation.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/getting-started.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/embed.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/persist.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/query-json.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/index.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/package.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/plugins.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/reference/cli.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/reference/columns.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/reference/config.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/reference/glob.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/reference/hooks.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/reference/http-api.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/reference/sdk.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/speed.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/docs/speed.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1334-listing-exemptions.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1406-watch-no-tables-1008.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1414-stat-speed.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1415-server-speed.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1416-watch-speed-1008.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1418-node-modules.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1419-dotdot-slashes.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1420-bracket-slash.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1421-posix-unicode.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1422-literal-gitignore.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1426-walk-spawn-threshold-1008.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1428-ndjson-hooks.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1429-parallel-hooks.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1430-dotdot-as-written.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1431-persist-cache-dir.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1437-test-cache-isolation.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1440-fix-main-build.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1448-wildcard-ignored-prefix.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1451-named-dir-never-hidden.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1454-split-few-files.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1457-incremental-refresh-1008.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1459-rescan-on-overflow-1008.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1461-chunked-read-1016.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1461-row-footprint-1008.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1461-wide-read-1015.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1462-paired-speed-harness-1008.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1464-fastest-native-1008.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1469-ci-speed-sanity-1009.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1470-perf-suite-1009.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1470-speed-page-1011.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1474-vtab-speed-1014.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1475-rowpath-1016.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1477-onelevel-speed-1015.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1477-onelevel-speed-1016.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1480-matcher-speed-1015.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1481-gitrepo-speed-1015.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1483-fm-speed-1015.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1484-jsonl-speed-1015.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1487-frontend-query-1011.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1488-frontend-metadata-1011.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1489-frontend-browse-1013.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1503-bench-watch-1011.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1504-bench-names-1011.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1514-watch-rerun-inline-1015.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1524-path-eq-1016.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1526-main-red-1016.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1532-gitignore-fastest-bar-1016.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1534-fm-native-1016.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1538-onfile-order-1019.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1540-update-in-place-1019.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-1541-defer-fk-1019.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-fix-main-place-depth-20261007.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-issue-1486-frontend-20261009.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-speed-gap-childpath-1011.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-speed-parse-overlap-1011.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-speed-parse-paths-1009.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-speed-parse-pragmas-1011.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-speed-sql-valueref-1013.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-speed-walk-components-1011.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-speed-walk-rowpath-1011.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-speed-walk-rows-1013.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/bot-speed-walk-sched-1009.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1258-config-braces.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1258-config-directory.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1258-config-dotnames.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1258-config-gitignore.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1258-config-links.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-06-config-braces.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-06-config-directory.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-06-config-dotnames.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-06-config-gitignore.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-06-config-links.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-07-bracket-slash-literal.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-07-dotdot-as-written.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-07-glob-walks-node-modules.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-07-literal-gitignore.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-07-on-file-ndjson.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-07-parallel-hooks.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-07-persist-cache-outside-root.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-07-posix-classes-unicode.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-07-spread-few-large-files.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/2026-10-08-watch-requires-named-table.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/migrations.d/README.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/src/lib.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/testing-conventions.toml +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/tests/__init__.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/tests/conftest.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/tests/e2e/__init__.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/tests/e2e/bench_report.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/tests/e2e/bench_suite.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/tests/e2e/speed_of_light.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/tests/integration/__init__.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/tests/integration/binding/__init__.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/python/tests/integration/hermetic/__init__.py +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/CHANGELOG.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/MIGRATIONS.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/README.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/benches/db_bench.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/benches/differ_bench.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/benches/matcher_bench.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/benches/scanner_bench.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/context/.gitattributes +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/context/recipes.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/context/usage.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/explanation.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/getting-started.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/embed.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/persist.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/query-json.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/index.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/plugins.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/reference/cli.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/reference/columns.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/reference/config.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/reference/glob.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/reference/hooks.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/reference/http-api.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/reference/sdk.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/speed.json +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/docs/speed.md +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/bin/dirsql.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/brace.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/context.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/execute.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/frontend.html +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/frontend.js +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/init.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/mod.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/repl.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/router.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/run.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/serialize.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/server.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/cli/table.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/command.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/config.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/db.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/default_config.toml +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/differ.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/extension_resolution.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/foreign_key.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/functions.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/gitignore_frame.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/infer.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/launcher.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/lib.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/listing.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/matcher.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/on_file.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/parsed_vtab.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/path_table.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/per_thread.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/persist.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/posix_class.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/progress.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/row_event_flat.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/row_stream.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/scanner.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/sql_literal.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/vtab.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/vtab_scaffold.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/packages/rust/src/watcher.rs +0 -0
- {dirsql-0.4.119 → dirsql-0.4.120}/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.120"
|
|
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.120"
|
|
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.120"
|
|
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/glob_speed_depth_bound_test.py tests/e2e/glob_speed_one_level_test.py tests/e2e/glob_speed_recursive_test.py tests/e2e/glob_speed_matchers_test.py tests/e2e/glob_speed_dotfiles_test.py tests/e2e/glob_speed_gitignore_test.py tests/e2e/glob_speed_node_modules_test.py tests/e2e/glob_speed_symlink_test.py tests/e2e/query_contract_test.py tests/e2e/fanout_test.py tests/e2e/use_case_join_test.py tests/e2e/stat_speed_test.py tests/e2e/release_speed_test.py -q",
|
|
3
|
+
"ran_at": 1792499019,
|
|
4
|
+
"exit_code": 0,
|
|
5
|
+
"commit": "9647c7ae1dab28acb9c211eced8f82624376b3b2",
|
|
6
|
+
"branch": "bot/1478-perdir-walk-1020"
|
|
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.120"
|
|
10
10
|
edition.workspace = true
|
|
11
11
|
# Literal `license` (not `license.workspace = true`) because
|
|
12
12
|
# putitoutthere's preflight check reads `[package].license` directly
|
|
@@ -55,11 +55,54 @@ struct Open<D, L> {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
/// A found directory, ordered so the heap's greatest is the earliest key.
|
|
58
|
-
|
|
58
|
+
/// The key's leading bytes ride along as `rank`, so most comparisons never
|
|
59
|
+
/// leave the heap's own memory: the heap is ordered under the lock every
|
|
60
|
+
/// worker takes, and a comparison reaching into a slot another core wrote
|
|
61
|
+
/// held that lock long enough to serialize the workers.
|
|
62
|
+
struct Pending<D, L> {
|
|
63
|
+
rank: u128,
|
|
64
|
+
slot: Arc<Slot<D, L>>,
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
impl<D, L> Pending<D, L> {
|
|
68
|
+
fn new(slot: Arc<Slot<D, L>>) -> Self {
|
|
69
|
+
Pending {
|
|
70
|
+
rank: rank(&slot.key),
|
|
71
|
+
slot,
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/// The first sixteen bytes of `key` encoded so that bytes order as keys do:
|
|
77
|
+
/// each index plus one, in one byte below 0x80, two below 0x4000, else a
|
|
78
|
+
/// 0xC0 byte and four more. No encoded index starts with a zero byte, so a
|
|
79
|
+
/// key ranks below every key it is a prefix of.
|
|
80
|
+
fn rank(key: &[u32]) -> u128 {
|
|
81
|
+
let mut bytes = [0u8; 16];
|
|
82
|
+
let mut at = 0;
|
|
83
|
+
for &index in key {
|
|
84
|
+
let [b0, b1, b2, b3] = index.saturating_add(1).to_be_bytes();
|
|
85
|
+
let encoded: &[u8] = if index < 0x7F {
|
|
86
|
+
&[b3]
|
|
87
|
+
} else if index < 0x3FFF {
|
|
88
|
+
&[0x80 + b2, b3]
|
|
89
|
+
} else {
|
|
90
|
+
&[0xC0, b0, b1, b2, b3]
|
|
91
|
+
};
|
|
92
|
+
for &byte in encoded {
|
|
93
|
+
let Some(slot) = bytes.get_mut(at) else {
|
|
94
|
+
return u128::from_be_bytes(bytes);
|
|
95
|
+
};
|
|
96
|
+
*slot = byte;
|
|
97
|
+
at += 1;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
u128::from_be_bytes(bytes)
|
|
101
|
+
}
|
|
59
102
|
|
|
60
103
|
impl<D, L> PartialEq for Pending<D, L> {
|
|
61
104
|
fn eq(&self, other: &Self) -> bool {
|
|
62
|
-
self.
|
|
105
|
+
self.cmp(other) == Order::Equal
|
|
63
106
|
}
|
|
64
107
|
}
|
|
65
108
|
|
|
@@ -73,10 +116,16 @@ impl<D, L> PartialOrd for Pending<D, L> {
|
|
|
73
116
|
|
|
74
117
|
impl<D, L> Ord for Pending<D, L> {
|
|
75
118
|
fn cmp(&self, other: &Self) -> Order {
|
|
76
|
-
other
|
|
119
|
+
other
|
|
120
|
+
.rank
|
|
121
|
+
.cmp(&self.rank)
|
|
122
|
+
.then_with(|| other.slot.key.cmp(&self.slot.key))
|
|
77
123
|
}
|
|
78
124
|
}
|
|
79
125
|
|
|
126
|
+
/// A directory's items, and the directories among them.
|
|
127
|
+
type Found<D, L> = (Vec<Item<D, L>>, Vec<Arc<Slot<D, L>>>);
|
|
128
|
+
|
|
80
129
|
struct Shared<'e, D, L> {
|
|
81
130
|
open: Mutex<Open<D, L>>,
|
|
82
131
|
found_dir: Condvar,
|
|
@@ -156,20 +205,30 @@ impl<D, L> Shared<'_, D, L> {
|
|
|
156
205
|
}
|
|
157
206
|
|
|
158
207
|
fn work(&self) {
|
|
159
|
-
|
|
208
|
+
let mut next = self.claim();
|
|
209
|
+
while let Some(slot) = next {
|
|
160
210
|
let unclaimed = lock(&slot.dir).take();
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
let items = self.explore(dir, &slot.key);
|
|
165
|
-
let mut explored = lock(&slot.explored);
|
|
166
|
-
explored.items = Some(items);
|
|
167
|
-
if explored.awaited {
|
|
168
|
-
slot.ready.notify_one();
|
|
169
|
-
}
|
|
211
|
+
next = unclaimed
|
|
212
|
+
.and_then(|dir| self.explore_taking_next(&slot, dir))
|
|
213
|
+
.or_else(|| self.claim());
|
|
170
214
|
}
|
|
171
215
|
}
|
|
172
216
|
|
|
217
|
+
/// Explore `dir`, `slot`'s directory, for whoever awaits it, taking back
|
|
218
|
+
/// the next directory to explore if one is open. Registering what it
|
|
219
|
+
/// found and taking the next under one hold halves how often a worker
|
|
220
|
+
/// takes the lock every worker shares.
|
|
221
|
+
fn explore_taking_next(&self, slot: &Slot<D, L>, dir: D) -> Option<Arc<Slot<D, L>>> {
|
|
222
|
+
let (items, dirs) = self.explore_only(dir, &slot.key);
|
|
223
|
+
let next = self.register(dirs, true);
|
|
224
|
+
let mut explored = lock(&slot.explored);
|
|
225
|
+
explored.items = Some(items);
|
|
226
|
+
if explored.awaited {
|
|
227
|
+
slot.ready.notify_one();
|
|
228
|
+
}
|
|
229
|
+
next
|
|
230
|
+
}
|
|
231
|
+
|
|
173
232
|
/// The next directory found, or `None` once the walk is over.
|
|
174
233
|
fn claim(&self) -> Option<Arc<Slot<D, L>>> {
|
|
175
234
|
let mut open = self.open_lock();
|
|
@@ -177,7 +236,7 @@ impl<D, L> Shared<'_, D, L> {
|
|
|
177
236
|
if open.done {
|
|
178
237
|
return None;
|
|
179
238
|
}
|
|
180
|
-
if let Some(Pending
|
|
239
|
+
if let Some(Pending { slot, .. }) = open.slots.pop() {
|
|
181
240
|
return Some(slot);
|
|
182
241
|
}
|
|
183
242
|
open = self
|
|
@@ -190,6 +249,31 @@ impl<D, L> Shared<'_, D, L> {
|
|
|
190
249
|
/// Explore `dir`, at `key`, registering the directories it holds for any
|
|
191
250
|
/// thread to claim.
|
|
192
251
|
fn explore(&self, dir: D, key: &[u32]) -> Vec<Item<D, L>> {
|
|
252
|
+
let (items, dirs) = self.explore_only(dir, key);
|
|
253
|
+
if !dirs.is_empty() {
|
|
254
|
+
self.register(dirs, false);
|
|
255
|
+
}
|
|
256
|
+
items
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/// Open `dirs` to any thread, taking the earliest open directory back
|
|
260
|
+
/// when `take` is set.
|
|
261
|
+
fn register(&self, dirs: Vec<Arc<Slot<D, L>>>, take: bool) -> Option<Arc<Slot<D, L>>> {
|
|
262
|
+
let found = dirs.len();
|
|
263
|
+
let mut open = self.open_lock();
|
|
264
|
+
open.slots.extend(dirs.into_iter().map(Pending::new));
|
|
265
|
+
let taken = take.then(|| open.slots.pop()).flatten();
|
|
266
|
+
drop(open);
|
|
267
|
+
// The thread that found them takes one next, so only the rest need
|
|
268
|
+
// a waiting worker.
|
|
269
|
+
for _ in 1..found {
|
|
270
|
+
self.found_dir.notify_one();
|
|
271
|
+
}
|
|
272
|
+
taken.map(|pending| pending.slot)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/// Explore `dir`, at `key`.
|
|
276
|
+
fn explore_only(&self, dir: D, key: &[u32]) -> Found<D, L> {
|
|
193
277
|
let steps = (self.explore)(dir);
|
|
194
278
|
let mut dirs = Vec::new();
|
|
195
279
|
let items: Vec<Item<D, L>> = steps
|
|
@@ -212,18 +296,10 @@ impl<D, L> Shared<'_, D, L> {
|
|
|
212
296
|
}
|
|
213
297
|
})
|
|
214
298
|
.collect();
|
|
215
|
-
if dirs.is_empty() {
|
|
216
|
-
|
|
217
|
-
}
|
|
218
|
-
self.found.fetch_add(dirs.len(), Ordering::Relaxed);
|
|
219
|
-
let found = dirs.len();
|
|
220
|
-
self.open_lock().slots.extend(dirs.into_iter().map(Pending));
|
|
221
|
-
// The thread that found them takes one next, so only the rest need
|
|
222
|
-
// a waiting worker.
|
|
223
|
-
for _ in 1..found {
|
|
224
|
-
self.found_dir.notify_one();
|
|
299
|
+
if !dirs.is_empty() {
|
|
300
|
+
self.found.fetch_add(dirs.len(), Ordering::Relaxed);
|
|
225
301
|
}
|
|
226
|
-
items
|
|
302
|
+
(items, dirs)
|
|
227
303
|
}
|
|
228
304
|
}
|
|
229
305
|
|
|
@@ -290,8 +366,8 @@ mod tests {
|
|
|
290
366
|
threads.into_inner().unwrap().len()
|
|
291
367
|
}
|
|
292
368
|
|
|
293
|
-
fn
|
|
294
|
-
|
|
369
|
+
fn slot(key: &[u32]) -> Arc<Slot<(), ()>> {
|
|
370
|
+
Arc::new(Slot {
|
|
295
371
|
key: key.to_vec(),
|
|
296
372
|
dir: Mutex::new(None),
|
|
297
373
|
explored: Mutex::new(Explored {
|
|
@@ -299,7 +375,33 @@ mod tests {
|
|
|
299
375
|
awaited: false,
|
|
300
376
|
}),
|
|
301
377
|
ready: Condvar::new(),
|
|
302
|
-
})
|
|
378
|
+
})
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
fn pending(key: &[u32]) -> Pending<(), ()> {
|
|
382
|
+
Pending::new(slot(key))
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
#[test]
|
|
386
|
+
fn registering_opens_the_directories_and_may_take_back_the_earliest() {
|
|
387
|
+
let explore = |(): ()| Vec::new();
|
|
388
|
+
let shared = Shared {
|
|
389
|
+
open: Mutex::new(Open {
|
|
390
|
+
slots: BinaryHeap::new(),
|
|
391
|
+
done: false,
|
|
392
|
+
}),
|
|
393
|
+
found_dir: Condvar::new(),
|
|
394
|
+
found: AtomicUsize::new(0),
|
|
395
|
+
explore: &explore,
|
|
396
|
+
};
|
|
397
|
+
assert!(
|
|
398
|
+
shared
|
|
399
|
+
.register(vec![slot(&[1]), slot(&[0])], false)
|
|
400
|
+
.is_none()
|
|
401
|
+
);
|
|
402
|
+
let taken = shared.register(vec![slot(&[2])], true);
|
|
403
|
+
assert_eq!(taken.map(|slot| slot.key.clone()), Some(vec![0]));
|
|
404
|
+
assert_eq!(shared.open_lock().slots.len(), 2);
|
|
303
405
|
}
|
|
304
406
|
|
|
305
407
|
#[test]
|
|
@@ -315,11 +417,36 @@ mod tests {
|
|
|
315
417
|
open.push(pending(key));
|
|
316
418
|
}
|
|
317
419
|
let order: Vec<Vec<u32>> = std::iter::from_fn(|| open.pop())
|
|
318
|
-
.map(|
|
|
420
|
+
.map(|pending| pending.slot.key.clone())
|
|
319
421
|
.collect();
|
|
320
422
|
assert_eq!(order, vec![vec![0], vec![0, 1, 5], vec![0, 2], vec![1]]);
|
|
321
423
|
}
|
|
322
424
|
|
|
425
|
+
#[test]
|
|
426
|
+
fn ranks_order_as_their_keys_do() {
|
|
427
|
+
let boundaries = [0, 1, 0x7E, 0x7F, 0x80, 0x3FFE, 0x3FFF, 0x4000, u32::MAX - 1];
|
|
428
|
+
let mut keys: Vec<Vec<u32>> = vec![vec![]];
|
|
429
|
+
for &a in &boundaries {
|
|
430
|
+
keys.push(vec![a]);
|
|
431
|
+
for &b in &boundaries {
|
|
432
|
+
keys.push(vec![a, b]);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
keys.sort();
|
|
436
|
+
let ranks: Vec<u128> = keys.iter().map(|key| rank(key)).collect();
|
|
437
|
+
assert!(ranks.windows(2).all(|pair| pair[0] < pair[1]));
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
#[test]
|
|
441
|
+
fn keys_past_sixteen_encoded_bytes_are_ordered_by_the_whole_key() {
|
|
442
|
+
let deep = [0x4000; 4];
|
|
443
|
+
let mut open = BinaryHeap::new();
|
|
444
|
+
for last in [2, 1] {
|
|
445
|
+
open.push(pending(&[&deep[..], &[last]].concat()));
|
|
446
|
+
}
|
|
447
|
+
assert_eq!(open.pop().unwrap().slot.key.last(), Some(&1));
|
|
448
|
+
}
|
|
449
|
+
|
|
323
450
|
#[test]
|
|
324
451
|
fn a_walk_of_few_directories_stays_on_the_calling_thread() {
|
|
325
452
|
assert_eq!(threads_exploring(3, 1), 1);
|
|
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
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-13-plugin-discovery.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-13-repeatable-config.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-07-29-restore-python-310.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md
RENAMED
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md
RENAMED
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/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.119 → dirsql-0.4.120}/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.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/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.119 → dirsql-0.4.120}/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.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-config-directory.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-config-gitignore.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-bracket-slash-literal.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-dotdot-as-written.md
RENAMED
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-glob-walks-node-modules.md
RENAMED
|
File without changes
|
{dirsql-0.4.119 → dirsql-0.4.120}/packages/python/changelog.d/2026-10-07-literal-gitignore.md
RENAMED
|
File without changes
|
|
File without changes
|