242b0ebb5cbtcsignals: use a single shared_ptr for liveness and callback (Cory Fields)b12f43a0a8signals: remove boost::signals2 from depends and vcpkg (Cory Fields)a4b1607983signals: remove boost::signals2 mentions in linters and docs (Cory Fields)375397ebd9signals: remove boost includes where possible (Cory Fields)091736a153signals: re-add forward-declares to interface headers (Cory Fields)9958f4fe49Revert "signals: Temporarily add boost headers to bitcoind and bitcoin-node builds" (Cory Fields)34eabd77a2signals: remove boost compatibility guards (Cory Fields)e60a0b9a22signals: Add a simplified boost-compatible implementation (Cory Fields)63c68e2a3fsignals: add signals tests (Cory Fields)edc2978058signals: use an alias for the boost::signals2 namespace (Cory Fields)9ade3929aasignals: remove forward-declare for signals (Cory Fields)037e58b57bsignals: use forwarding header for boost signals (Cory Fields)2150153f37signals: Temporarily add boost headers to bitcoind and bitcoin-node builds (Cory Fields)fd5e9d9904signals: Use a lambda to avoid connecting a signal to another signal (Cory Fields) Pull request description: This drops our dependency on `boost::signals2`, leaving `boost::multi_index` as the only remaining boost dependency for bitcoind. `boost::signals2` is a complex beast, but we only use a small portion of it. Namely: it's a way for multiple subscribers to connect to the same event, and the ability to later disconnect individual subscribers from that event. `btcsignals` adheres to the subset of the `boost::signals2` API that we currently use, and thus is a drop-in replacement. Rather than implementing a complex `slot` tracking class that we never used anyway (and which was much more useful in the days before std::function existed), callbacks are simply wrapped directly in `std::function`s. The new tests work with either `boost::signals2` or the new `btcsignals` implementation. Reviewers can verify functional equivalency by running the tests in the commit that introduces them against `boost::signals2`, then again with `btcsignals`. The majority of the commits in this PR are preparation and cleanup. Once `boost::signals2` is no longer needed, it is removed from depends. Additionally, a few CMake targets no longer need boost includes as they were previously only required for signals. I think this is actually pretty straightforward to review. I kept things simple, including keeping types unmovable/uncopyable where possible rather than trying to define those semantics. In doing so, the new implementation has even fewer type requirements than boost, which I believe is due to a boost bug. I've opened a PR upstream for that to attempt to maintain parity between the implementations. See individual commits for more details. Closes #26442. ACKs for top commit: fjahr: Code review ACK242b0ebb5cmaflcko: re-review ACK242b0ebb5c🎯 w0xlt: reACK242b0ebb5cTree-SHA512: 9a472afa4f655624fa44493774a63b57509ad30fb61bf1d89b6d0b52000cb9a1409a5b8d515a99c76e0b26b2437c30508206c29a7dd44ea96eb1979d572cd4d4
This folder contains lint scripts.
Running locally
To run linters locally with the same versions as the CI environment use the lint.py helper script which runs checks inside the CI container:
./ci/lint.py
Extra arguments are passed to cargo run -- ... in the container so you can do:
./ci/lint.py --help
./ci/lint.py --lint=py_lint
test runner
To run all the lint checks in the test runner outside the container you first need to install the rust toolchain using your package manager of choice or rustup.
Then you can use:
( cd ./test/lint/test_runner/ && cargo fmt && cargo clippy && RUST_BACKTRACE=1 cargo run )
If you wish to run individual lint checks, run the test_runner with
--lint=TEST_TO_RUN arguments. If running with cargo run, arguments after
-- are passed to the binary you are running e.g.:
( cd ./test/lint/test_runner/ && RUST_BACKTRACE=1 cargo run -- --lint=doc --lint=trailing_whitespace )
To see a list of all individual lint checks available in test_runner, use -h
or --help:
( cd ./test/lint/test_runner/ && RUST_BACKTRACE=1 cargo run -- --help )
Dependencies
| Lint test | Dependency |
|---|---|
lint-python.py |
lief |
lint-python.py |
mypy |
lint-python.py |
pyzmq |
lint-shell.py |
ShellCheck |
py_lint |
ruff |
| markdown link check | mlc |
In use versions and install instructions are available in the CI setup.
Please be aware that on Linux distributions all dependencies are usually available as packages, but could be outdated.
Running the tests
Individual tests can be run by directly calling the test script, e.g.:
test/lint/lint-files.py
check-doc.py
Check for missing documentation of command line options.
commit-script-check.sh
Verification of scripted diffs. Scripted diffs are only assumed to run on the latest LTS release of Ubuntu. Running them on other operating systems might require installing GNU tools, such as GNU sed.
git-subtree-check.sh
Run this script from the root of the repository to verify that a subtree matches the contents of the commit it claims to have been updated to.
Usage: test/lint/git-subtree-check.sh [-r] DIR [COMMIT]
test/lint/git-subtree-check.sh -?
DIRis the prefix within the repository to check.COMMITis the commit to check, if it is not provided, HEAD will be used.-rchecks that subtree commit is present in repository.
To do a full check with -r, make sure that you have fetched the upstream repository branch in which the subtree is
maintained:
- for
src/crc32c: https://github.com/bitcoin-core/crc32c-subtree.git (branch bitcoin-fork) - for
src/crypto/ctaes: https://github.com/bitcoin-core/ctaes.git (branch master) - for
src/ipc/libmultiprocess: https://github.com/bitcoin-core/libmultiprocess (branch master) - for
src/leveldb: https://github.com/bitcoin-core/leveldb-subtree.git (branch bitcoin-fork) - for
src/minisketch: https://github.com/bitcoin-core/minisketch.git (branch master) - for
src/secp256k1: https://github.com/bitcoin-core/secp256k1.git (branch master)
Keep this list in sync with fn get_subtrees() in the lint runner.
To do so, add the upstream repository as remote:
git remote add --fetch secp256k1 https://github.com/bitcoin-core/secp256k1.git
lint_ignore_dirs.py
Add list of common directories to ignore when running tests