bashkit 0.4.1__tar.gz → 0.5.0__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.
- {bashkit-0.4.1 → bashkit-0.5.0}/Cargo.lock +17 -6
- {bashkit-0.4.1 → bashkit-0.5.0}/Cargo.toml +1 -1
- {bashkit-0.4.1 → bashkit-0.5.0}/PKG-INFO +1 -1
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/Cargo.toml +4 -5
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/clap-builtins.md +5 -18
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/custom_builtins.md +4 -5
- bashkit-0.5.0/crates/bashkit/src/builtins/cat.rs +193 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/compgen.rs +4 -4
- bashkit-0.5.0/crates/bashkit/src/builtins/generated/cat_args.rs +132 -0
- bashkit-0.5.0/crates/bashkit/src/builtins/generated/mod.rs +34 -0
- bashkit-0.5.0/crates/bashkit/src/builtins/generated/readlink_args.rs +125 -0
- bashkit-0.5.0/crates/bashkit/src/builtins/generated/shuf_args.rs +148 -0
- bashkit-0.5.0/crates/bashkit/src/builtins/generated/tac_args.rs +72 -0
- bashkit-0.5.0/crates/bashkit/src/builtins/generated/truncate_args.rs +99 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/mod.rs +56 -9
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/path.rs +77 -48
- bashkit-0.5.0/crates/bashkit/src/builtins/shuf.rs +265 -0
- bashkit-0.5.0/crates/bashkit/src/builtins/textrev.rs +192 -0
- bashkit-0.5.0/crates/bashkit/src/builtins/truncate.rs +346 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interpreter/mod.rs +2 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/lib.rs +3 -6
- bashkit-0.5.0/crates/bashkit/src/tool_def.rs +1223 -0
- bashkit-0.5.0/crates/bashkit/tests/coreutils_differential_tests.rs +548 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/custom_builtins_tests.rs +0 -11
- bashkit-0.5.0/crates/bashkit/tests/spec_cases/bash/cat.test.sh +81 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/help-flag.test.sh +3 -3
- bashkit-0.5.0/crates/bashkit/tests/spec_cases/bash/readlink.test.sh +55 -0
- bashkit-0.5.0/crates/bashkit/tests/spec_cases/bash/shuf.test.sh +65 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/textrev.test.sh +16 -0
- bashkit-0.5.0/crates/bashkit/tests/spec_cases/bash/truncate.test.sh +105 -0
- bashkit-0.4.1/crates/bashkit/src/builtins/cat.rs +0 -109
- bashkit-0.4.1/crates/bashkit/src/builtins/textrev.rs +0 -132
- bashkit-0.4.1/crates/bashkit/src/tool_def.rs +0 -440
- {bashkit-0.4.1 → bashkit-0.5.0}/README.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/__init__.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/_bashkit.pyi +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/deepagents.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/langchain.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/py.typed +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/pydantic_ai.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/README.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/benches/parallel_execution.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/benches/sqlite.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/compatibility.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/credential-injection.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/hooks.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/jq.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/live_mounts.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/logging.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/python.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/sqlite.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/ssh.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/threat-model.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/typescript.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/agent_tool.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/basic.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/clap_builtin.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/clap_builtin_subcommands.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/custom_backend.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/custom_builtins.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/custom_filesystem_impl.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/custom_fs.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/git_workflow.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/live_mounts.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/python_external_functions.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/python_scripts.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/realfs_readonly.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/realfs_readwrite.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/resource_limits.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/scripted_tool.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/show_tool_output.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/sqlite_basic.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/sqlite_workflow.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/ssh_supabase.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/streaming_output.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/text_files.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/text_processing.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/typescript_external_functions.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/typescript_scripts.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/virtual_identity.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/proptest-regressions/builtins/sqlite/tests.txt +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/alias.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/archive.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/arg_parser.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/assert.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/awk.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/base64.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/bc.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/caller.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/checksum.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/clear.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/column.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/comm.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/csv.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/curl.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/cuttr.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/date.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/diff.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/dirstack.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/disk.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/dotenv.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/echo.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/environ.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/envsubst.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/expand.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/export.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/expr.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/fc.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/fileops.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/flow.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/fold.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/git/client.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/git/cmd.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/git/config.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/git/mod.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/glob_cmd.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/grep.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/headtail.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/help.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/hextools.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/http.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/iconv.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/inspect.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/introspect.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/join.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/args.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/compat.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/convert.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/errors.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/format.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/mod.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/regex_compat.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/json.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/log.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ls.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/mapfile.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/mkfifo.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/navigation.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/nl.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/numfmt.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/parallel.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/paste.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/patch.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/pipeline.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/printf.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/python.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/read.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/retry.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/rg.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/search_common.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sed.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/semver.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/seq.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sleep.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sortuniq.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/source.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/split.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/dot_commands.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/engine.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/formatter.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/mod.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/parser.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/vfs_io.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/allowlist.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/client.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/cmd.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/config.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/handler.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/mod.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/russh_handler.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/strings.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/system.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/template.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/timeout.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/tomlq.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/trap.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/tree.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/typescript.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/vars.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/verify.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/wait.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/wc.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/yaml.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/yes.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/zip_cmd.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/credential.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/error.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/backend.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/limits.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/memory.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/mod.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/mountable.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/overlay.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/posix.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/realfs.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/search.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/traits.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/hooks.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interop/fs.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interop/mod.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interpreter/glob.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interpreter/jobs.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interpreter/state.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/limits.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/logging_impl.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/network/allowlist.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/network/bot_auth.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/network/client.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/network/mod.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/ast.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/budget.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/lexer.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/mod.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/span.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/tokens.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/scripted_tool/execute.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/scripted_tool/extension.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/scripted_tool/mod.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/scripted_tool/toolset.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/snapshot.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/testing.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/tool.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/trace.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/allexport_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/awk_fuzz_scaffold_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/awk_newline_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/awk_pattern_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/awk_printf_expr_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/awk_range_pattern_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/background_exec_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/bash_source_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/blackbox_security_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/builtin_error_security_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/byte_range_panic_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/cancellation_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/cmdsub_quote_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/coproc_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/credential_injection_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/custom_fs_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/dev_null_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/final_env_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/find_multi_path_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/git_advanced_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/git_inspection_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/git_integration_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/git_remote_security_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/git_security_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/harness_example_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/history_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_1175_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_274_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_275_279_282_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_276_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_277_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_289_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_290_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_291_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_853_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_872_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_873_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_875_test.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/jq_fuzz_scaffold_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/live_mount_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/logging_security_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/mkfifo_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/nested_subscript_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/network_security_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/output_truncation_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/overlay_path_validation_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/proptest_differential.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/proptest_security.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/python_integration_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/python_security_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/realfs_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/regex_limit_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/release_profile_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/script_execution_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/security_audit_pocs.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/security_failpoint_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/set_e_and_or_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/azure_discover_rank.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/azure_generate_url.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/azure_query_capacity.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/helm_validate_chart.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/jwt_test_setup.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/stitch_download_asset.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/stitch_fetch.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/stitch_verify_setup.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/superpowers_find_polluter.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/vercel_deploy.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/snapshot_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/source_function_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/awk.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/delete-array.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/dev-stderr.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/eval-bugs.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/filename.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/getline-file.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/alias.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/append_redirect.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/arith-dynamic.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/arithmetic-base-expansion.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/arithmetic.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/array-slicing.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/array-splat.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/arrays.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/assoc-arrays.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/awk-printf-width.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/background.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bash-c-exports.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bash-command.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bash-flags.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bash-source-var.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bash-stdin-pipe.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bc.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/blackbox-edge-cases.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/blackbox-exploration.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/brace-expansion.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/brace_expansion_lookahead.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/checksum.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/chown-kill.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/cmd-suggestions.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/cmdsub_depth_unquoted.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/column.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/comm.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/command-not-found.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/command-subst.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/command.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/command_v.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/compgen-path.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/conditional-short-circuit.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/conditional.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/control-flow.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/cuttr.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/date.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/declare.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/df.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/diff.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/dirstack.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/du.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/echo.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/empty-bodies.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/env.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/errexit.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/eval-bugs.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/exec-command.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/exec-fd-redirect.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/exec-fd-variable.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/exit-status.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/expr.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/extglob.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/file.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/fileops.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/find.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/functions.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/getopts.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/glob-options.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/glob_match_cap.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/globs.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/gzip.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/headtail.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/heredoc-edge.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/heredoc.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/herestring.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/hextools.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/history.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/indirect-expansion.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/less.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/ln.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/ls.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/memory_budget_desync.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/nameref-assoc.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/nameref.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/negative-tests.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/nl.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/nounset.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/numfmt.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/parse-errors.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/paste-flags.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/paste.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/path.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/pipes-redirects.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/printenv.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/printf.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/procsub.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/quote.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/read-builtin.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/recursive-cmdsub.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/regex-limit.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/replace_pattern_limit.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/script-exec.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/seq.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/set-allexport.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/shell-grammar.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/sleep.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/sortuniq.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/source.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/stat.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/string-ops.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/strings.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/subprocess-isolation.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/subshell.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/tar.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/tar_create.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/tee.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/temp-binding.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/test-operators.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/test-tty.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/time.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/timeout.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/tree.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/type.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/unicode.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/unset-exported-var.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/var-op-test.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/variables.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/wait.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/watch.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/wc.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/word-split.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/xargs.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/grep/eval-bugs.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/grep/grep.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/grep/rg.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/jq/jq.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/python/env_leak.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/python/python.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/sed/eval-bugs.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/sed/sed.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/typescript/typescript.test.sh +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_runner.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/sqlite_compat_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/sqlite_differential_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/sqlite_fuzz_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/sqlite_integration_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/sqlite_security_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/ssh_builtin_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/ssh_supabase_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/stack_overflow_regression_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/subst_depth_limit_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/symlink_overlay_security_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/threat_model_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/tty_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/typescript_integration_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/typescript_security_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/unicode_security_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/unset_function_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/urandom_tests.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/Cargo.toml +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/README.md +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/bash_basics.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/custom_filesystem_interop.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/data_pipeline.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/fastapi_async_tool.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/jupyter_async_test.ipynb +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/k8s_orchestrator.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/langgraph_async_tool.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/llm_tool.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/src/lib.rs +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/_bashkit_categories.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/_security_advanced.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/_security_core.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_ai_adapters.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_async_callbacks.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_basic.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_builtins.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_control_flow.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_error_handling.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_fastapi_integration.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_filesystem_interop.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_integration.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_jupyter_compat.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_langgraph_integration.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_network_config.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_network_credentials.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_python_security.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_registered_tools.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_scripts.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_security.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_shell_injection.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_sqlite.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_streaming_output.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_strings_and_quoting.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_tool_metadata.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_vfs.py +0 -0
- {bashkit-0.4.1 → bashkit-0.5.0}/pyproject.toml +0 -0
|
@@ -345,7 +345,7 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
|
|
|
345
345
|
|
|
346
346
|
[[package]]
|
|
347
347
|
name = "bashkit"
|
|
348
|
-
version = "0.
|
|
348
|
+
version = "0.5.0"
|
|
349
349
|
dependencies = [
|
|
350
350
|
"anyhow",
|
|
351
351
|
"async-trait",
|
|
@@ -393,7 +393,7 @@ dependencies = [
|
|
|
393
393
|
|
|
394
394
|
[[package]]
|
|
395
395
|
name = "bashkit-bench"
|
|
396
|
-
version = "0.
|
|
396
|
+
version = "0.5.0"
|
|
397
397
|
dependencies = [
|
|
398
398
|
"anyhow",
|
|
399
399
|
"bashkit",
|
|
@@ -407,7 +407,7 @@ dependencies = [
|
|
|
407
407
|
|
|
408
408
|
[[package]]
|
|
409
409
|
name = "bashkit-cli"
|
|
410
|
-
version = "0.
|
|
410
|
+
version = "0.5.0"
|
|
411
411
|
dependencies = [
|
|
412
412
|
"anyhow",
|
|
413
413
|
"bashkit",
|
|
@@ -421,9 +421,20 @@ dependencies = [
|
|
|
421
421
|
"tokio",
|
|
422
422
|
]
|
|
423
423
|
|
|
424
|
+
[[package]]
|
|
425
|
+
name = "bashkit-coreutils-port"
|
|
426
|
+
version = "0.5.0"
|
|
427
|
+
dependencies = [
|
|
428
|
+
"anyhow",
|
|
429
|
+
"prettyplease",
|
|
430
|
+
"proc-macro2",
|
|
431
|
+
"quote",
|
|
432
|
+
"syn",
|
|
433
|
+
]
|
|
434
|
+
|
|
424
435
|
[[package]]
|
|
425
436
|
name = "bashkit-eval"
|
|
426
|
-
version = "0.
|
|
437
|
+
version = "0.5.0"
|
|
427
438
|
dependencies = [
|
|
428
439
|
"anyhow",
|
|
429
440
|
"async-trait",
|
|
@@ -440,7 +451,7 @@ dependencies = [
|
|
|
440
451
|
|
|
441
452
|
[[package]]
|
|
442
453
|
name = "bashkit-js"
|
|
443
|
-
version = "0.
|
|
454
|
+
version = "0.5.0"
|
|
444
455
|
dependencies = [
|
|
445
456
|
"bashkit",
|
|
446
457
|
"napi",
|
|
@@ -453,7 +464,7 @@ dependencies = [
|
|
|
453
464
|
|
|
454
465
|
[[package]]
|
|
455
466
|
name = "bashkit-python"
|
|
456
|
-
version = "0.
|
|
467
|
+
version = "0.5.0"
|
|
457
468
|
dependencies = [
|
|
458
469
|
"bashkit",
|
|
459
470
|
"num-bigint",
|
|
@@ -77,8 +77,9 @@ hmac = "0.13"
|
|
|
77
77
|
# Logging/tracing (optional)
|
|
78
78
|
tracing = { workspace = true, optional = true }
|
|
79
79
|
|
|
80
|
-
# CLI-style argument parsing for custom builtins
|
|
81
|
-
|
|
80
|
+
# CLI-style argument parsing for custom builtins and ported coreutils
|
|
81
|
+
# argument surfaces. Always on — see specs/coreutils-args-port.md.
|
|
82
|
+
clap = { workspace = true }
|
|
82
83
|
|
|
83
84
|
# Embedded Python interpreter (optional)
|
|
84
85
|
monty = { git = "https://github.com/pydantic/monty", rev = "49faa4c", optional = true }
|
|
@@ -91,9 +92,7 @@ zapcode-core = { version = "1.5", optional = true }
|
|
|
91
92
|
turso_core = { workspace = true, optional = true }
|
|
92
93
|
|
|
93
94
|
[features]
|
|
94
|
-
default = [
|
|
95
|
-
# Enable `ClapBuiltin` for custom builtins with `#[derive(clap::Parser)]`.
|
|
96
|
-
clap-builtins = ["dep:clap"]
|
|
95
|
+
default = []
|
|
97
96
|
# Enable jq builtin via embedded jaq interpreter
|
|
98
97
|
# Usage: cargo build --features jq
|
|
99
98
|
jq = ["dep:jaq-core", "dep:jaq-std", "dep:jaq-json"]
|
|
@@ -3,21 +3,8 @@
|
|
|
3
3
|
`ClapBuiltin` lets Rust applications define custom Bashkit commands with
|
|
4
4
|
`#[derive(clap::Parser)]` argument structs. Handlers receive a
|
|
5
5
|
`BashkitContext` that captures stdout, stderr, and exit code for the virtual
|
|
6
|
-
shell.
|
|
7
|
-
|
|
8
|
-
Disable it for a smaller library dependency surface:
|
|
9
|
-
|
|
10
|
-
```toml
|
|
11
|
-
[dependencies]
|
|
12
|
-
bashkit = { version = "0.3", default-features = false }
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Enable it explicitly when default features are off:
|
|
16
|
-
|
|
17
|
-
```toml
|
|
18
|
-
[dependencies]
|
|
19
|
-
bashkit = { version = "0.3", default-features = false, features = ["clap-builtins"] }
|
|
20
|
-
```
|
|
6
|
+
shell. `clap` is an unconditional dependency of `bashkit`, so this trait is
|
|
7
|
+
always available.
|
|
21
8
|
|
|
22
9
|
## Basic Usage
|
|
23
10
|
|
|
@@ -146,6 +133,6 @@ async fn main() -> bashkit::Result<()> {
|
|
|
146
133
|
|
|
147
134
|
## See Also
|
|
148
135
|
|
|
149
|
-
- [`crates/bashkit/examples/clap_builtin.rs`](../
|
|
150
|
-
- [`crates/bashkit/examples/clap_builtin_subcommands.rs`](../
|
|
151
|
-
- [`crates/bashkit/docs/custom_builtins.md`](
|
|
136
|
+
- [`crates/bashkit/examples/clap_builtin.rs`](../examples/clap_builtin.rs)
|
|
137
|
+
- [`crates/bashkit/examples/clap_builtin_subcommands.rs`](../examples/clap_builtin_subcommands.rs)
|
|
138
|
+
- [`crates/bashkit/docs/custom_builtins.md`](./custom_builtins.md)
|
|
@@ -7,7 +7,7 @@ virtual filesystem.
|
|
|
7
7
|
|
|
8
8
|
**See also:**
|
|
9
9
|
- [API Documentation](https://docs.rs/bashkit) - Full API reference
|
|
10
|
-
- [Clap Builtins](
|
|
10
|
+
- [Clap Builtins](./clap-builtins.md) - Derive parser structs for custom builtin args
|
|
11
11
|
- [Hooks](./hooks.md) - Interceptor hooks for the execution pipeline
|
|
12
12
|
- [Compatibility Reference](./compatibility.md) - Supported bash features
|
|
13
13
|
- [Threat Model](./threat-model.md) - Security considerations
|
|
@@ -156,10 +156,9 @@ Arguments are passed as a slice of strings, excluding the command name itself:
|
|
|
156
156
|
let first_arg = ctx.args.first().map(|s| s.as_str()).unwrap_or("default");
|
|
157
157
|
```
|
|
158
158
|
|
|
159
|
-
For custom builtins with richer flags, options, or subcommands,
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
module for tested examples.
|
|
159
|
+
For custom builtins with richer flags, options, or subcommands, implement
|
|
160
|
+
`ClapBuiltin` with a `#[derive(clap::Parser)]` argument type. See the
|
|
161
|
+
`clap_builtins_guide` rustdoc module for tested examples.
|
|
163
162
|
|
|
164
163
|
### Environment Variables
|
|
165
164
|
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
//! cat builtin.
|
|
2
|
+
//!
|
|
3
|
+
//! Argument surface is generated from uutils/coreutils' `uu_app()` via the
|
|
4
|
+
//! `bashkit-coreutils-port` codegen tool — see `generated/cat_args.rs` and
|
|
5
|
+
//! `crates/bashkit-coreutils-port/`. Behaviour is implemented locally
|
|
6
|
+
//! against the bashkit VFS.
|
|
7
|
+
|
|
8
|
+
use async_trait::async_trait;
|
|
9
|
+
use std::ffi::OsString;
|
|
10
|
+
use std::path::Path;
|
|
11
|
+
|
|
12
|
+
use super::generated::cat_args::cat_command;
|
|
13
|
+
use super::{Builtin, Context, read_text_file};
|
|
14
|
+
use crate::error::Result;
|
|
15
|
+
use crate::interpreter::ExecResult;
|
|
16
|
+
|
|
17
|
+
pub struct Cat;
|
|
18
|
+
|
|
19
|
+
#[async_trait]
|
|
20
|
+
impl Builtin for Cat {
|
|
21
|
+
async fn execute(&self, ctx: Context<'_>) -> Result<ExecResult> {
|
|
22
|
+
// clap expects argv[0] = program name; bashkit's ctx.args excludes it.
|
|
23
|
+
let argv: Vec<OsString> = std::iter::once(OsString::from("cat"))
|
|
24
|
+
.chain(ctx.args.iter().map(OsString::from))
|
|
25
|
+
.collect();
|
|
26
|
+
|
|
27
|
+
// GNU coreutils' help layout opens with the usage line; clap's
|
|
28
|
+
// default template leads with the `about`. uutils handles this via
|
|
29
|
+
// uucore's `localized_help_template`, which we drop during codegen
|
|
30
|
+
// because it pulls in Fluent. Re-apply a GNU-equivalent template.
|
|
31
|
+
let cmd = cat_command().help_template("Usage: {usage}\n{about}\n\n{all-args}\n");
|
|
32
|
+
let matches = match cmd.try_get_matches_from(argv) {
|
|
33
|
+
Ok(m) => m,
|
|
34
|
+
Err(e) => {
|
|
35
|
+
let kind = e.kind();
|
|
36
|
+
let rendered = e.render().to_string();
|
|
37
|
+
if matches!(
|
|
38
|
+
kind,
|
|
39
|
+
clap::error::ErrorKind::DisplayHelp | clap::error::ErrorKind::DisplayVersion
|
|
40
|
+
) {
|
|
41
|
+
return Ok(ExecResult::ok(rendered));
|
|
42
|
+
}
|
|
43
|
+
return Ok(ExecResult::err(rendered, 2));
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// Composite flags: -A = -vET, -e = -vE, -t = -vT.
|
|
48
|
+
let g = |k: &str| matches.get_flag(k);
|
|
49
|
+
let show_all = g("show-all");
|
|
50
|
+
let number_nonblank = g("number-nonblank");
|
|
51
|
+
let nonprint_ends = g("e");
|
|
52
|
+
let nonprint_tabs = g("t");
|
|
53
|
+
let show_ends = g("show-ends") || show_all || nonprint_ends;
|
|
54
|
+
let show_tabs = g("show-tabs") || show_all || nonprint_tabs;
|
|
55
|
+
let show_nonprinting = g("show-nonprinting") || show_all || nonprint_ends || nonprint_tabs;
|
|
56
|
+
let number_all = g("number") && !number_nonblank;
|
|
57
|
+
let squeeze = g("squeeze-blank");
|
|
58
|
+
|
|
59
|
+
// GNU `cat` reads stdin when FILE is "-" or absent. clap defaults
|
|
60
|
+
// FILE to "-" so absence and "-" are unified.
|
|
61
|
+
let files: Vec<String> = matches
|
|
62
|
+
.get_many::<OsString>("file")
|
|
63
|
+
.map(|vs| vs.map(|v| v.to_string_lossy().into_owned()).collect())
|
|
64
|
+
.unwrap_or_default();
|
|
65
|
+
|
|
66
|
+
let mut raw = String::new();
|
|
67
|
+
for file in &files {
|
|
68
|
+
if file == "-" {
|
|
69
|
+
if let Some(stdin) = ctx.stdin {
|
|
70
|
+
raw.push_str(stdin);
|
|
71
|
+
}
|
|
72
|
+
} else {
|
|
73
|
+
let path = if Path::new(file).is_absolute() {
|
|
74
|
+
file.clone()
|
|
75
|
+
} else {
|
|
76
|
+
ctx.cwd.join(file).to_string_lossy().into_owned()
|
|
77
|
+
};
|
|
78
|
+
match read_text_file(&*ctx.fs, Path::new(&path), "cat").await {
|
|
79
|
+
Ok(t) => raw.push_str(&t),
|
|
80
|
+
Err(e) => return Ok(e),
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
let output = render(
|
|
86
|
+
&raw,
|
|
87
|
+
show_ends,
|
|
88
|
+
show_tabs,
|
|
89
|
+
show_nonprinting,
|
|
90
|
+
number_all,
|
|
91
|
+
number_nonblank,
|
|
92
|
+
squeeze,
|
|
93
|
+
);
|
|
94
|
+
Ok(ExecResult::ok(output))
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/// Apply cat's display transforms in a single pass.
|
|
99
|
+
///
|
|
100
|
+
/// One pass because numbering interacts with squeezing — squeezed blank
|
|
101
|
+
/// lines must not be numbered. Two passes mis-number `cat -ns`.
|
|
102
|
+
fn render(
|
|
103
|
+
raw: &str,
|
|
104
|
+
show_ends: bool,
|
|
105
|
+
show_tabs: bool,
|
|
106
|
+
show_nonprinting: bool,
|
|
107
|
+
number_all: bool,
|
|
108
|
+
number_nonblank: bool,
|
|
109
|
+
squeeze: bool,
|
|
110
|
+
) -> String {
|
|
111
|
+
use std::fmt::Write;
|
|
112
|
+
|
|
113
|
+
let mut out = String::with_capacity(raw.len());
|
|
114
|
+
let mut counter: u64 = 0;
|
|
115
|
+
let mut prev_blank = false;
|
|
116
|
+
|
|
117
|
+
let mut iter = raw.split_inclusive('\n').peekable();
|
|
118
|
+
if iter.peek().is_none() {
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
for chunk in iter {
|
|
123
|
+
let (body, sep): (&str, &str) = match chunk.strip_suffix('\n') {
|
|
124
|
+
Some(b) => (b, "\n"),
|
|
125
|
+
None => (chunk, ""),
|
|
126
|
+
};
|
|
127
|
+
let is_blank = body.is_empty();
|
|
128
|
+
|
|
129
|
+
if squeeze && is_blank && prev_blank {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
prev_blank = is_blank;
|
|
133
|
+
|
|
134
|
+
if number_all || (number_nonblank && !is_blank) {
|
|
135
|
+
counter += 1;
|
|
136
|
+
let _ = write!(out, "{counter:>6}\t");
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if show_nonprinting || show_tabs {
|
|
140
|
+
for b in body.bytes() {
|
|
141
|
+
emit_byte(&mut out, b, show_tabs, show_nonprinting);
|
|
142
|
+
}
|
|
143
|
+
} else {
|
|
144
|
+
out.push_str(body);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if show_ends && !sep.is_empty() {
|
|
148
|
+
out.push('$');
|
|
149
|
+
}
|
|
150
|
+
out.push_str(sep);
|
|
151
|
+
}
|
|
152
|
+
out
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/// GNU cat -v style byte rendering.
|
|
156
|
+
///
|
|
157
|
+
/// - tab (0x09): literal '\t' unless `show_tabs` (then `^I`).
|
|
158
|
+
/// - bytes < 0x20 (other than tab/newline): `^X` (X = byte + 64) when
|
|
159
|
+
/// show_nonprinting; passed through otherwise.
|
|
160
|
+
/// - 0x7F (DEL): `^?`.
|
|
161
|
+
/// - 0x80..=0xFF (high bit set): `M-` prefix + low-7-bit rendered same way.
|
|
162
|
+
fn emit_byte(out: &mut String, b: u8, show_tabs: bool, show_nonprinting: bool) {
|
|
163
|
+
match b {
|
|
164
|
+
b'\t' if show_tabs => {
|
|
165
|
+
out.push('^');
|
|
166
|
+
out.push('I');
|
|
167
|
+
}
|
|
168
|
+
b'\t' => out.push('\t'),
|
|
169
|
+
b'\n' => out.push('\n'),
|
|
170
|
+
0..=31 if show_nonprinting => {
|
|
171
|
+
out.push('^');
|
|
172
|
+
out.push((b + 64) as char);
|
|
173
|
+
}
|
|
174
|
+
0x7f if show_nonprinting => {
|
|
175
|
+
out.push('^');
|
|
176
|
+
out.push('?');
|
|
177
|
+
}
|
|
178
|
+
128..=255 if show_nonprinting => {
|
|
179
|
+
out.push_str("M-");
|
|
180
|
+
let low = b & 0x7f;
|
|
181
|
+
if (0..32).contains(&low) {
|
|
182
|
+
out.push('^');
|
|
183
|
+
out.push((low + 64) as char);
|
|
184
|
+
} else if low == 0x7f {
|
|
185
|
+
out.push('^');
|
|
186
|
+
out.push('?');
|
|
187
|
+
} else {
|
|
188
|
+
out.push(low as char);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
_ => out.push(b as char),
|
|
192
|
+
}
|
|
193
|
+
}
|
|
@@ -29,10 +29,10 @@ const BUILTIN_COMMANDS: &[&str] = &[
|
|
|
29
29
|
"history", "hostname", "iconv", "id", "jq", "json", "join", "kill", "ln", "local", "log", "ls",
|
|
30
30
|
"mkdir", "mktemp", "mv", "nl", "od", "paste", "popd", "printenv", "printf", "pushd", "pwd",
|
|
31
31
|
"read", "readlink", "readonly", "realpath", "retry", "return", "rev", "rm", "rmdir", "sed",
|
|
32
|
-
"semver", "seq", "set", "shift", "shopt", "sleep", "sort", "source", "split", "stat",
|
|
33
|
-
"strings", "tac", "tail", "tar", "tee", "test", "timeout", "touch", "tr", "tree", "
|
|
34
|
-
"uname", "unexpand", "uniq", "unset", "wait", "watch", "wc", "wget", "whoami", "xargs",
|
|
35
|
-
"yes",
|
|
32
|
+
"semver", "seq", "set", "shift", "shopt", "shuf", "sleep", "sort", "source", "split", "stat",
|
|
33
|
+
"strings", "tac", "tail", "tar", "tee", "test", "timeout", "touch", "tr", "tree", "truncate",
|
|
34
|
+
"true", "uname", "unexpand", "uniq", "unset", "wait", "watch", "wc", "wget", "whoami", "xargs",
|
|
35
|
+
"xxd", "yes",
|
|
36
36
|
];
|
|
37
37
|
|
|
38
38
|
#[async_trait]
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// GENERATED by bashkit-coreutils-port. DO NOT EDIT.
|
|
2
|
+
//
|
|
3
|
+
// Source: uutils/coreutils@39364b6 src/uu/cat/
|
|
4
|
+
// Regenerate: cargo run -p bashkit-coreutils-port -- <UUTILS_DIR> cat <REV>
|
|
5
|
+
//
|
|
6
|
+
// Original uutils licensed MIT; see THIRD_PARTY_LICENSES.
|
|
7
|
+
|
|
8
|
+
#![allow(unused_imports, dead_code)]
|
|
9
|
+
use clap::{Arg, ArgAction, Command, builder::ValueParser};
|
|
10
|
+
use std::ffi::OsString;
|
|
11
|
+
use std::ops::RangeInclusive;
|
|
12
|
+
use std::str::FromStr;
|
|
13
|
+
mod options {
|
|
14
|
+
pub static FILE: &str = "file";
|
|
15
|
+
pub static SHOW_ALL: &str = "show-all";
|
|
16
|
+
pub static NUMBER_NONBLANK: &str = "number-nonblank";
|
|
17
|
+
pub static SHOW_NONPRINTING_ENDS: &str = "e";
|
|
18
|
+
pub static SHOW_ENDS: &str = "show-ends";
|
|
19
|
+
pub static NUMBER: &str = "number";
|
|
20
|
+
pub static SQUEEZE_BLANK: &str = "squeeze-blank";
|
|
21
|
+
pub static SHOW_NONPRINTING_TABS: &str = "t";
|
|
22
|
+
pub static SHOW_TABS: &str = "show-tabs";
|
|
23
|
+
pub static SHOW_NONPRINTING: &str = "show-nonprinting";
|
|
24
|
+
pub static IGNORED_U: &str = "ignored-u";
|
|
25
|
+
}
|
|
26
|
+
/// Vendored stand-in for `uucore::format_usage`.
|
|
27
|
+
///
|
|
28
|
+
/// Upstream wraps the usage line with stylized "Usage:" prefix logic
|
|
29
|
+
/// driven by uucore's locale stack. For our purposes the raw string
|
|
30
|
+
/// is enough; clap's `override_usage` accepts the literal as-is.
|
|
31
|
+
fn format_usage(s: &str) -> String {
|
|
32
|
+
s.to_string()
|
|
33
|
+
}
|
|
34
|
+
pub fn cat_command() -> Command {
|
|
35
|
+
Command::new("cat")
|
|
36
|
+
.version(env!("CARGO_PKG_VERSION"))
|
|
37
|
+
.override_usage(
|
|
38
|
+
format_usage(&::std::string::String::from("cat [OPTION]... [FILE]...")),
|
|
39
|
+
)
|
|
40
|
+
.about(
|
|
41
|
+
::std::string::String::from(
|
|
42
|
+
"Concatenate FILE(s), or standard input, to standard output\nWith no FILE, or when FILE is -, read standard input.",
|
|
43
|
+
),
|
|
44
|
+
)
|
|
45
|
+
.infer_long_args(true)
|
|
46
|
+
.args_override_self(true)
|
|
47
|
+
.arg(
|
|
48
|
+
Arg::new(options::FILE)
|
|
49
|
+
.hide(true)
|
|
50
|
+
.action(ArgAction::Append)
|
|
51
|
+
.value_parser(clap::value_parser!(OsString))
|
|
52
|
+
.default_value("-")
|
|
53
|
+
.value_hint(clap::ValueHint::FilePath),
|
|
54
|
+
)
|
|
55
|
+
.arg(
|
|
56
|
+
Arg::new(options::SHOW_ALL)
|
|
57
|
+
.short('A')
|
|
58
|
+
.long(options::SHOW_ALL)
|
|
59
|
+
.help(::std::string::String::from("equivalent to -vET"))
|
|
60
|
+
.action(ArgAction::SetTrue),
|
|
61
|
+
)
|
|
62
|
+
.arg(
|
|
63
|
+
Arg::new(options::NUMBER_NONBLANK)
|
|
64
|
+
.short('b')
|
|
65
|
+
.long(options::NUMBER_NONBLANK)
|
|
66
|
+
.help(
|
|
67
|
+
::std::string::String::from(
|
|
68
|
+
"number nonempty output lines, overrides -n",
|
|
69
|
+
),
|
|
70
|
+
)
|
|
71
|
+
.action(ArgAction::SetTrue),
|
|
72
|
+
)
|
|
73
|
+
.arg(
|
|
74
|
+
Arg::new(options::SHOW_NONPRINTING_ENDS)
|
|
75
|
+
.short('e')
|
|
76
|
+
.help(::std::string::String::from("equivalent to -vE"))
|
|
77
|
+
.action(ArgAction::SetTrue),
|
|
78
|
+
)
|
|
79
|
+
.arg(
|
|
80
|
+
Arg::new(options::SHOW_ENDS)
|
|
81
|
+
.short('E')
|
|
82
|
+
.long(options::SHOW_ENDS)
|
|
83
|
+
.help(::std::string::String::from("display $ at end of each line"))
|
|
84
|
+
.action(ArgAction::SetTrue),
|
|
85
|
+
)
|
|
86
|
+
.arg(
|
|
87
|
+
Arg::new(options::NUMBER)
|
|
88
|
+
.short('n')
|
|
89
|
+
.long(options::NUMBER)
|
|
90
|
+
.help(::std::string::String::from("number all output lines"))
|
|
91
|
+
.action(ArgAction::SetTrue),
|
|
92
|
+
)
|
|
93
|
+
.arg(
|
|
94
|
+
Arg::new(options::SQUEEZE_BLANK)
|
|
95
|
+
.short('s')
|
|
96
|
+
.long(options::SQUEEZE_BLANK)
|
|
97
|
+
.help(
|
|
98
|
+
::std::string::String::from("suppress repeated empty output lines"),
|
|
99
|
+
)
|
|
100
|
+
.action(ArgAction::SetTrue),
|
|
101
|
+
)
|
|
102
|
+
.arg(
|
|
103
|
+
Arg::new(options::SHOW_NONPRINTING_TABS)
|
|
104
|
+
.short('t')
|
|
105
|
+
.help(::std::string::String::from("equivalent to -vT"))
|
|
106
|
+
.action(ArgAction::SetTrue),
|
|
107
|
+
)
|
|
108
|
+
.arg(
|
|
109
|
+
Arg::new(options::SHOW_TABS)
|
|
110
|
+
.short('T')
|
|
111
|
+
.long(options::SHOW_TABS)
|
|
112
|
+
.help(::std::string::String::from("display TAB characters at ^I"))
|
|
113
|
+
.action(ArgAction::SetTrue),
|
|
114
|
+
)
|
|
115
|
+
.arg(
|
|
116
|
+
Arg::new(options::SHOW_NONPRINTING)
|
|
117
|
+
.short('v')
|
|
118
|
+
.long(options::SHOW_NONPRINTING)
|
|
119
|
+
.help(
|
|
120
|
+
::std::string::String::from(
|
|
121
|
+
"use ^ and M- notation, except for LF (\\n) and TAB (\\t)",
|
|
122
|
+
),
|
|
123
|
+
)
|
|
124
|
+
.action(ArgAction::SetTrue),
|
|
125
|
+
)
|
|
126
|
+
.arg(
|
|
127
|
+
Arg::new(options::IGNORED_U)
|
|
128
|
+
.short('u')
|
|
129
|
+
.help(::std::string::String::from("(ignored)"))
|
|
130
|
+
.action(ArgAction::SetTrue),
|
|
131
|
+
)
|
|
132
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// GENERATED MODULE INDEX. Edit individual `*_args.rs` files only via the
|
|
2
|
+
// `bashkit-coreutils-port` codegen tool — see crates/bashkit-coreutils-port.
|
|
3
|
+
//
|
|
4
|
+
// Each `<util>_args.rs` exposes `pub fn <util>_command() -> clap::Command`
|
|
5
|
+
// derived from uutils/coreutils' `uu_app()` definitions, with `translate!()`
|
|
6
|
+
// keys resolved against the corresponding `en-US.ftl`.
|
|
7
|
+
|
|
8
|
+
/// Pinned uutils/coreutils revision used by:
|
|
9
|
+
///
|
|
10
|
+
/// 1. The `bashkit-coreutils-port` codegen tool (drift workflow checks
|
|
11
|
+
/// out uutils at this rev before regenerating `<util>_args.rs`).
|
|
12
|
+
/// 2. The `coreutils_differential_tests` body-drift harness (drift
|
|
13
|
+
/// workflow builds the `coreutils` multicall from this same rev
|
|
14
|
+
/// before running the harness with `BASHKIT_RUN_COREUTILS_DIFF=1`).
|
|
15
|
+
///
|
|
16
|
+
/// Single source of truth: when this constant moves, both the args
|
|
17
|
+
/// surfaces and the body-drift gate move with it. Bumping is normally
|
|
18
|
+
/// the work of the auto-PR opened by `coreutils-args-drift.yml`; manual
|
|
19
|
+
/// bumps require regenerating every `<util>_args.rs` file at the new
|
|
20
|
+
/// rev so headers stay aligned with this constant. The static test
|
|
21
|
+
/// `builtins::tests::generated_args_headers_match_pinned_uutils_\
|
|
22
|
+
/// revision` enforces that invariant.
|
|
23
|
+
//
|
|
24
|
+
// The constant is read at port time (codegen, drift workflow, justfile)
|
|
25
|
+
// and at test time (the invariant assertion). Nothing in the lib's
|
|
26
|
+
// runtime path needs it, hence `allow(dead_code)`.
|
|
27
|
+
#[allow(dead_code)]
|
|
28
|
+
pub const UUTILS_REVISION: &str = "39364b6";
|
|
29
|
+
|
|
30
|
+
pub mod cat_args;
|
|
31
|
+
pub mod readlink_args;
|
|
32
|
+
pub mod shuf_args;
|
|
33
|
+
pub mod tac_args;
|
|
34
|
+
pub mod truncate_args;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// GENERATED by bashkit-coreutils-port. DO NOT EDIT.
|
|
2
|
+
//
|
|
3
|
+
// Source: uutils/coreutils@39364b6 src/uu/readlink/
|
|
4
|
+
// Regenerate: cargo run -p bashkit-coreutils-port -- <UUTILS_DIR> readlink <REV>
|
|
5
|
+
//
|
|
6
|
+
// Original uutils licensed MIT; see THIRD_PARTY_LICENSES.
|
|
7
|
+
|
|
8
|
+
#![allow(unused_imports, dead_code)]
|
|
9
|
+
use clap::{Arg, ArgAction, Command, builder::ValueParser};
|
|
10
|
+
use std::ffi::OsString;
|
|
11
|
+
use std::ops::RangeInclusive;
|
|
12
|
+
use std::str::FromStr;
|
|
13
|
+
const OPT_CANONICALIZE: &str = "canonicalize";
|
|
14
|
+
const OPT_CANONICALIZE_MISSING: &str = "canonicalize-missing";
|
|
15
|
+
const OPT_CANONICALIZE_EXISTING: &str = "canonicalize-existing";
|
|
16
|
+
const OPT_NO_NEWLINE: &str = "no-newline";
|
|
17
|
+
const OPT_QUIET: &str = "quiet";
|
|
18
|
+
const OPT_SILENT: &str = "silent";
|
|
19
|
+
const OPT_VERBOSE: &str = "verbose";
|
|
20
|
+
const OPT_ZERO: &str = "zero";
|
|
21
|
+
const ARG_FILES: &str = "files";
|
|
22
|
+
/// Vendored stand-in for `uucore::format_usage`.
|
|
23
|
+
///
|
|
24
|
+
/// Upstream wraps the usage line with stylized "Usage:" prefix logic
|
|
25
|
+
/// driven by uucore's locale stack. For our purposes the raw string
|
|
26
|
+
/// is enough; clap's `override_usage` accepts the literal as-is.
|
|
27
|
+
fn format_usage(s: &str) -> String {
|
|
28
|
+
s.to_string()
|
|
29
|
+
}
|
|
30
|
+
pub fn readlink_command() -> Command {
|
|
31
|
+
Command::new("readlink")
|
|
32
|
+
.version(env!("CARGO_PKG_VERSION"))
|
|
33
|
+
.about(
|
|
34
|
+
::std::string::String::from(
|
|
35
|
+
"Print value of a symbolic link or canonical file name.",
|
|
36
|
+
),
|
|
37
|
+
)
|
|
38
|
+
.override_usage(
|
|
39
|
+
format_usage(&::std::string::String::from("readlink [OPTION]... [FILE]...")),
|
|
40
|
+
)
|
|
41
|
+
.infer_long_args(true)
|
|
42
|
+
.arg(
|
|
43
|
+
Arg::new(OPT_CANONICALIZE)
|
|
44
|
+
.short('f')
|
|
45
|
+
.long(OPT_CANONICALIZE)
|
|
46
|
+
.help(
|
|
47
|
+
::std::string::String::from(
|
|
48
|
+
"canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist",
|
|
49
|
+
),
|
|
50
|
+
)
|
|
51
|
+
.action(ArgAction::SetTrue),
|
|
52
|
+
)
|
|
53
|
+
.arg(
|
|
54
|
+
Arg::new(OPT_CANONICALIZE_EXISTING)
|
|
55
|
+
.short('e')
|
|
56
|
+
.long("canonicalize-existing")
|
|
57
|
+
.help(
|
|
58
|
+
::std::string::String::from(
|
|
59
|
+
"canonicalize by following every symlink in every component of the given name recursively, all components must exist",
|
|
60
|
+
),
|
|
61
|
+
)
|
|
62
|
+
.action(ArgAction::SetTrue),
|
|
63
|
+
)
|
|
64
|
+
.arg(
|
|
65
|
+
Arg::new(OPT_CANONICALIZE_MISSING)
|
|
66
|
+
.short('m')
|
|
67
|
+
.long(OPT_CANONICALIZE_MISSING)
|
|
68
|
+
.help(
|
|
69
|
+
::std::string::String::from(
|
|
70
|
+
"canonicalize by following every symlink in every component of the given name recursively, without requirements on components existence",
|
|
71
|
+
),
|
|
72
|
+
)
|
|
73
|
+
.action(ArgAction::SetTrue),
|
|
74
|
+
)
|
|
75
|
+
.arg(
|
|
76
|
+
Arg::new(OPT_NO_NEWLINE)
|
|
77
|
+
.short('n')
|
|
78
|
+
.long(OPT_NO_NEWLINE)
|
|
79
|
+
.help(
|
|
80
|
+
::std::string::String::from("do not output the trailing delimiter"),
|
|
81
|
+
)
|
|
82
|
+
.action(ArgAction::SetTrue),
|
|
83
|
+
)
|
|
84
|
+
.arg(
|
|
85
|
+
Arg::new(OPT_QUIET)
|
|
86
|
+
.short('q')
|
|
87
|
+
.long(OPT_QUIET)
|
|
88
|
+
.help(::std::string::String::from("suppress most error messages"))
|
|
89
|
+
.overrides_with_all([OPT_QUIET, OPT_SILENT, OPT_VERBOSE])
|
|
90
|
+
.action(ArgAction::SetTrue),
|
|
91
|
+
)
|
|
92
|
+
.arg(
|
|
93
|
+
Arg::new(OPT_SILENT)
|
|
94
|
+
.short('s')
|
|
95
|
+
.long(OPT_SILENT)
|
|
96
|
+
.help(::std::string::String::from("suppress most error messages"))
|
|
97
|
+
.overrides_with_all([OPT_QUIET, OPT_SILENT, OPT_VERBOSE])
|
|
98
|
+
.action(ArgAction::SetTrue),
|
|
99
|
+
)
|
|
100
|
+
.arg(
|
|
101
|
+
Arg::new(OPT_VERBOSE)
|
|
102
|
+
.short('v')
|
|
103
|
+
.long(OPT_VERBOSE)
|
|
104
|
+
.help(::std::string::String::from("report error message"))
|
|
105
|
+
.overrides_with_all([OPT_QUIET, OPT_SILENT, OPT_VERBOSE])
|
|
106
|
+
.action(ArgAction::SetTrue),
|
|
107
|
+
)
|
|
108
|
+
.arg(
|
|
109
|
+
Arg::new(OPT_ZERO)
|
|
110
|
+
.short('z')
|
|
111
|
+
.long(OPT_ZERO)
|
|
112
|
+
.help(
|
|
113
|
+
::std::string::String::from(
|
|
114
|
+
"separate output with NUL rather than newline",
|
|
115
|
+
),
|
|
116
|
+
)
|
|
117
|
+
.action(ArgAction::SetTrue),
|
|
118
|
+
)
|
|
119
|
+
.arg(
|
|
120
|
+
Arg::new(ARG_FILES)
|
|
121
|
+
.action(ArgAction::Append)
|
|
122
|
+
.value_parser(clap::value_parser!(OsString))
|
|
123
|
+
.value_hint(clap::ValueHint::AnyPath),
|
|
124
|
+
)
|
|
125
|
+
}
|