比特币 - 目录 - Bitcoin

  • bitcoin
  • 发布于 2025-05-10 15:13
  • 阅读 13

该文档介绍了Bitcoin Core开发者仓库中用于开发者的一些工具,包括:用于检查fuzz覆盖非确定性的工具、检查单元测试覆盖非确定性的工具、格式化git diff的脚本、管理版权信息的脚本、自动创建manpage的脚本、生成headerssync模块参数的脚本、生成bitcoin.conf文件的脚本以及查找循环依赖的脚本。

内容

该目录包含用于致力于此仓库的开发者的工具。

deterministic-fuzz-coverage

一个用于检查fuzz coverage中非确定性的工具。要获取帮助,运行:

cargo run --manifest-path ./contrib/devtools/deterministic-fuzz-coverage/Cargo.toml -- --help

要执行该工具,编译必须使用以下构建选项完成:

-DCMAKE_C_COMPILER='clang' -DCMAKE_CXX_COMPILER='clang++' -DBUILD_FOR_FUZZING=ON -DCMAKE_CXX_FLAGS='-fprofile-instr-generate -fcoverage-mapping'

必须安装llvm-profdata和llvm-cov。此外,qa-assets 仓库必须已经被克隆。最后,在运行该工具之前,必须选择一个fuzz target:

cargo run --manifest-path ./contrib/devtools/deterministic-fuzz-coverage/Cargo.toml -- $PWD/build_dir $PWD/qa-assets/fuzz_corpora fuzz_target_name

deterministic-unittest-coverage

一个用于检查单元测试覆盖率中非确定性的工具。要获取帮助,运行:

cargo run --manifest-path ./contrib/devtools/deterministic-unittest-coverage/Cargo.toml -- --help

要执行该工具,编译必须使用以下构建选项完成:

-DCMAKE_C_COMPILER='clang' -DCMAKE_CXX_COMPILER='clang++' -DCMAKE_CXX_FLAGS='-fprofile-instr-generate -fcoverage-mapping'

必须安装llvm-profdata和llvm-cov。

cargo run --manifest-path ./contrib/devtools/deterministic-unittest-coverage/Cargo.toml -- $PWD/build_dir <boost unittest filter>

clang-format-diff.py

一个根据.clang-format格式化统一git差异的脚本。

需要clang-format,例如通过macOS上的brew install clang-format或Debian/Ubuntu上的sudo apt install clang-format安装。

例如,要格式化最后一次提交,上下文为0行, 应该从git根文件夹调用该脚本,如下所示。

git diff -U0 HEAD~1.. | ./contrib/devtools/clang-format-diff.py -p1 -i -v

copyright_header.py

提供用于管理仓库源文件中The Bitcoin Core developers的版权头部的实用程序。它有三个子命令:

$ ./copyright_header.py report <base_directory> [verbose]
$ ./copyright_header.py update <base_directory>
$ ./copyright_header.py insert <file>

在没有参数的情况下运行这些子命令会显示用法字符串。

copyright_header.py report \<base_directory> [verbose]

生成在仓库源文件中找到的所有版权头声明的报告。有助于快速可视化标题的状态。指定verbose将列出每个类别的文件的完整文件名。

copyright_header.py update \<base_directory> [verbose]

更新The Bitcoin Core developers的所有版权标题,这些标题在比列表中列出的年份更新的年份中进行了更改。例如:

// Copyright (c) &lt;firstYear>-&lt;lastYear> The Bitcoin Core developers

将更新为:

// Copyright (c) &lt;firstYear>-&lt;lastModifiedYear> The Bitcoin Core developers

其中&lt;lastModifiedYear>是从git log历史记录中获得的。

此子命令还处理仅具有单个年份的版权头。在这些情况下:

// Copyright (c) &lt;year> The Bitcoin Core developers

将更新为:

// Copyright (c) &lt;year>-&lt;lastModifiedYear> The Bitcoin Core developers

其中更新是适当的。

copyright_header.py insert \<file>

在文件顶部插入The Bitcoin Core developers的版权标题,样式为Python或C ++样式,具体取决于文件扩展名。如果该文件是Python文件,并且第一行以#!开头,则该标头将插入在其下面的行中。

版权日期将设置为&lt;year_introduced>-&lt;current_year>,其中&lt;year_introduced>是根据git log历史记录。如果 &lt;year_introduced>等于&lt;current_year>,它将被设置为单一年份,而不是两个用连字符连接的年份。

如果该文件已经具有The Bitcoin Core developers的版权,则脚本将退出。

gen-manpages.py

一个小型脚本,通过使用 -help 选项运行release二进制文件来自动在 ../../doc/man 中创建 manpage。 这需要 help2man 可以在以下位置找到:https://www.gnu.org/software/help2man/

此脚本假定一个名为 build 的构建目录,如示例构建文档中所建议的那样。 要将其用于其他构建目录,请设置 BUILDDIR。 例如:

BUILDDIR=$PWD/my-build-dir contrib/devtools/gen-manpages.py

headerssync-params.py

一个为 headerssync 模块(src/headerssync.cpp)生成最佳参数的脚本。它不接受命令行选项,因为它的所有配置都在文件顶部设置。它在 PyPy 内部运行速度快很多倍。 调用:

pypy3 contrib/devtools/headerssync-params.py

gen-bitcoin-conf.sh

通过解析 bitcoind --help 的输出来在 share/examples/ 中生成一个 bitcoin.conf 文件。此脚本在发行版过程中运行,以将 bitcoin.conf 包含在发行版二进制文件中,用户也可以运行该脚本以在本地生成文件。 在生成文件作为发行版过程的一部分时,请确保在运行脚本后提交更改。

此脚本假定一个名为 build 的构建目录,如示例构建文档中所建议的那样。 要将其用于其他构建目录,请设置 BUILDDIR。 例如:

BUILDDIR=$PWD/my-build-dir contrib/devtools/gen-bitcoin-conf.sh

circular-dependencies.py

从源树的根目录 (src/) 运行此脚本以查找源代码中的循环依赖项。 这仅查看哪些文件包含其他文件,将 .cpp.h 文件视为一个单元。

使用示例:

cd .../src
../contrib/devtools/circular-dependencies.py {*,*/*,*/*/*}.{h,cpp}
  • 原文链接: github.com/bitcoin/bitco...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
bitcoin
bitcoin
江湖只有他的大名,没有他的介绍。