库维护人员使用符号版本控制的助手

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阳离子二进制接口
< COL/> < COL/> <正文> <表>
[api] 1 2 https://en.wikipedia.org/wiki/application\u programming\u interface
< COL/> < COL/> <正文> <表>

历史记录

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编写共享库

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
IE中的java跨域cookie问题   重复java中已经满足的循环   编译java RMI服务器时出错   JavaServlet POST中作为参数传递的javascript大型JSON数组数据为空   java片段未每次刷新/调用   java无法编译。错误消息   java如何构造大型类?   java Hibernate:TableThingsDB。事情并不存在   java如何操作从匹配项创建的数组。发现   循环以搜索和显示数组Java的某些部分   加载或注册SQLite JDBC驱动程序时出现java问题   活动和服务之间的java连接   JavaGWTG2D:ie8中的drawImage   java在安卓中设置hessian阈值   在Tomcat中使用Logback时发生java错误