库维护人员使用符号版本控制的助手
abimap的Python项目详细描述
abimap
库维护人员使用符号版本控制的助手
为什么使用符号版本控制?
主要原因是能够保持库的稳定。
如果库打算长期使用,则需要更新 最终的错误修复和/或改进。 这可能会导致 [api] 中的更改,并且在最坏的情况下,更改为 [abi]
使用符号版本控制,可以进行兼容的更改并保持 无需重新编译即可工作的应用程序。 如果进行了不兼容的更改(中断 [abi] ),则符号版本控制允许 在同一个系统中生活的不兼容版本没有冲突。 甚至更不常见的情况,如要链接到的应用程序 同一个库的不同(不兼容)版本。
有关更多信息,我强烈建议阅读:
- [如何] 如何编写共享库,由ulrich dreper提供
如何将符号版本控制添加到我的库中?
向符号中添加版本信息很容易。 不幸的是,保持 [abi] 稳定并非如此。本项目旨在帮助第一部分。
要将版本信息添加到库的符号中,可以使用版本脚本(在Linux中)。 版本脚本是链接器用来将符号映射到给定版本的文件。 它包含由库导出的符号,这些符号按引入它们的版本分组。例如:
LIB_EXAMPLE_1_0_0 { global: symbol; another_symbol; local: *; };
在本例中,release lib_1_0_0 引入了符号 symbol 和 另一个符号。 local 中的 * 通配符捕获所有其他符号,这意味着只有 符号 和 另一个符号 作为库的一部分全局导出。
如果进行了兼容的更改,则会引入新版本,如:
LIB_EXAMPLE_1_0_0 { global: symbol; another_symbol; local: *; }; LIB_EXAMPLE_1_1_0 { global: new_symbol; } LIB_EXAMPLE_1_0_0;
新版本的lib-example引入了符号new-symbol。 通配符应该只在一个版本中,通常在最旧的版本中。 新版本末尾的lib示例部分表示新版本依赖于旧版本。
假设在lib-example-1-0之后发布了一个新的不兼容版本。它的地图看起来像:
LIB_EXAMPLE_2_0_0 { global: a_newer_symbol; another_symbol; new_symbol; local: *; };
符号 符号 被删除(这就是它不兼容的原因)。并且引入了一个新的符号, 一个新的符号
请注意,所有版本中的所有全局符号都合并到一个唯一的新版本中。
安装:
在命令行:
pip install abimap
用法:
这个项目提供一个脚本, abimap 。这是我在python中的第一个项目,请随时指出改进的方法。
子命令 update 和 new 需要stdin中给出的符号列表。符号列表是由非字母数字字符分隔的单词(与正则表达式匹配)。例如:
symbol, another, one_more
和:
symbol another one_more
是有效的输入。
最后一个子命令,check,只希望映射文件的路径是 检查。
tl;dr
$ abimap update lib_example.map < symbols_list
或(设置输出):
$ abimap update lib_example.map -o new.map < symbols_list
或:
$ cat symbols_list | abimap update lib_example.map -o new.map
或(创建新地图):
LIB_EXAMPLE_1_0_0 { global: symbol; another_symbol; local: *; };0
或(检查现有地图的内容):
LIB_EXAMPLE_1_0_0 { global: symbol; another_symbol; local: *; };1
或(检查当前版本):
LIB_EXAMPLE_1_0_0 { global: symbol; another_symbol; local: *; };2
长版
运行abimap -h 将得到:
LIB_EXAMPLE_1_0_0 { global: symbol; another_symbol; local: *; };3
调用传递'-h'的子命令以查看其特定选项 有四个子命令, update , new , check 和 version
运行abimap update会得到:
LIB_EXAMPLE_1_0_0 { global: symbol; another_symbol; local: *; };4
运行abimap new将得到:
LIB_EXAMPLE_1_0_0 { global: symbol; another_symbol; local: *; };5
运行abimap check将给出:
LIB_EXAMPLE_1_0_0 { global: symbol; another_symbol; local: *; };6
运行abimap版本将得到:
LIB_EXAMPLE_1_0_0 { global: symbol; another_symbol; local: *; };7
作为库导入:
将项目中的abimap用作库:
LIB_EXAMPLE_1_0_0 { global: symbol; another_symbol; local: *; };8
文档:
签入 阅读文档
参考文献:
< COL/> < COL/> <正文> <表>
>
| < | <1 1 1 1 1 1 2 , 3 3 , 4 a>a>a>> https://en.wikipedia.org/wiki/appli阳离子二进制接口 |
[api] | ( 1 , 2 ) https://en.wikipedia.org/wiki/application\u programming\u interface |
历史记录
0.3.2(2019-08-05)
- 修复了由于警告输出更改而导致的损坏的生成
- 更改测试以检查错误消息
- 在测试矩阵中添加了Python3.7
- 添加了在检查文档中的URL时验证SNI的要求
0.3.1(2018-08-20)
- 修正了排序版本时的错误:旧版本优先
- 添加了setuptools缺少的运行时要求
- 增加了手册页生成功能
0.3.0(2018-08-03)
- 将项目完全重命名为abimap
0.2.5(2018-07-26)
- 使用不同的程序名添加测试
- 在输出str中使用命令行应用程序名<
- 为控制台脚本添加新的入口点symver smap
- 如果pytest版本是<;3.4,则跳过使用caplog的测试
- 在setup.cfg中为pytest添加了别名。此已修复测试目标的setup.py
0.2.4(2018-06-15)
- 删除死代码,删除可执行文件权限
- 已删除AppVeyor相关文件
0.2.3(2018-06-15)
- 从脚本中删除shebang
0.2.2(2018-06-01)
- 修复了使用提供的发布信息进行更新时出现的错误
- 修复了"从发布字符串获取信息"中的错误
0.2.1(2018-05-30)
- 修复了在发行版名称中接受无效字符的错误
0.2.0(2018-05-29)
- 在输出文件中添加了版本信息
- 将子命令"version"添加到输出名称和版本
- 添加了选项"–final",将修改后的版本标记为已发布
- 防止带有要修改的特殊注释"released"的版本
- 允许现有版本更新
- 检测作为输入给定的重复符号
0.1.0(2018-05-09)
- pypi上的第一个版本。
[如何] | https://www.akkadia.org/drepper/dsohowto.pdf ,如何由ulrich drepper编写共享库 |