具有语义版本控制和通用版本格式的版本控制系统

enhanced-versioning的Python项目详细描述


版本控制包

版本控制包是实现语义版本控制的version包的派生。分叉version的主要原因是扩展功能以支持非语义版本控制模式。在

pip install enhanced-versioning==0.2.1

语义版本实现

Enhanced-Versioning包提供了SemanticVersion,它实现了Semantic Versioning spec 2.0.0-rc.1中描述的版本控制。在

简单X.Y.Z版本示例:

^{pr2}$

预发布和构建版本示例:

>>>v2=SemanticVersion('2.7.3-rc.2.15+19.e02afe3')>>>v2.major2>>>v2.minor7>>>v2.patch3>>>v2.pre_release['rc',2,15]>>>v2.build[19,'e02afe3']

SemanticVersion支持丰富的比较运算符(<;,<;=,>;,>;=,==!=), 因此可以进行排序:

>>>versions=[SemanticVersion('1.0.0+0.3.7'),...SemanticVersion('1.0.0'),...SemanticVersion('1.0.0-beta.11'),...SemanticVersion('0.9.0'),...SemanticVersion('1.0.0-rc.1'),...SemanticVersion('1.0.0-rc.1+build.1'),...SemanticVersion('1.0.0-alpha.1')]>>>print('\n'.join(map(str,sorted(versions))))0.9.01.0.0-alpha.11.0.0-beta.111.0.0-rc.11.0.0-rc.1+build.11.0.01.0.0+0.3.7

非语义版本实现

Versioning包提供了NonSematicVersion,它实现了如下所述的非语义版本控制系统。在

非语义版本规范

此规范继承了语义版本规范的大部分内容,除非另有说明。在

  1. 使用非语义版本的软件可以声明公共API,但不是必需的。在
  2. 一个或多个版本必须由一个或多个版本组成。修订必须至少包含一个非负整数或ASCII字母字符[0-9A-Za-z],其中整数(如果存在)必须位于字符之前。修订分为两部分。在比较中,整数值优先于字符值的整数值和字符值。每次修订都会增加很多。例如:1.2a.4->;1.2b.4->;1.3a.4。在
  3. Semantic Versioning Specification Rule 3
  4. 非语义版本控制没有定义稳定性的标准。在
  5. 非语义版本控制不需要定义公共API。在
  6. 左侧的修订必须比右侧的修订具有更大的权重,但非语义版本控制并不能精确定义每个修订必须意味着什么。在
  7. 当左侧的修订增加时,右侧的修订必须重置为适当的起始值。修订的整数值必须重置为0。字符值应重置为“a”。在
  8. 见上文第7条。在
  9. 有关预发布,请参见Semantic Versioning Specification Rule 9。在
  10. 有关生成,请参见Semantic Versioning Specification Rule 10。在
  11. 优先级必须通过分离各个版本和预发布标识符来计算。修订次数越少越好。如果修订数相等,则优先级由从左到右比较修订时的第一个差异确定,其中修订的整数值首先以数字形式进行比较,然后是按字母顺序比较的字符值。示例:1<;1.0<;1.1a<;1.1e<;1.2a。当所有修订都相同时,必须通过预发布确定优先级。请参阅Semantic Versioning Specification Rule 11以获取有关预发布优先级的完整详细信息。在

非语义版本控制示例:

>>>fromenhanced_versioningimportNonSemanticVersion>>>v=NonSemanticVersion('1')>>>vNonSemanticVersion('1')>>>str(v)'1'>>>v.revisions['1']>>>v.pre_release[]>>>v.build[]

预发布和构建版本示例:

>>>v2=NonSemanticVersion('1.4f.2c-rc.2.15+19.e02afe3')>>>v2NonSemanticVersion('1.4f.2c-rc.2.15+19.e02afe3')>>>str(v2)'1.4f.2c-rc.2.15+19.e02afe3'>>>v2.revisions['1','4f','2c']>>>v2.pre_release['rc',2,15]>>>v2.build[19,'e02afe3']

NonSemanticVersion支持丰富的比较运算符(<;,<;=,>;,>;=,==!=), 因此可以进行排序:

>>>versions=[NonSemanticVersion('1.0.4d.7f+0.3.7'),...NonSemanticVersion('1.0.4d.7f'),...NonSemanticVersion('1.0.4d.7f-beta.11'),...NonSemanticVersion('0.9.4d.7f'),...NonSemanticVersion('1.0.4d.7f-rc.1'),...NonSemanticVersion('1.0.4d.7f-rc.1+build.1'),...NonSemanticVersion('1.0.4d.7f-alpha.1'),...NonSemanticVersion('1.0.2f.12k+build.3')]>>>print('\n'.join(map(str,sorted(versions))))0.9.4d.7f1.0.2f.12k+build.31.0.4d.7f-alpha.11.0.4d.7f-beta.111.0.4d.7f-rc.11.0.4d.7f-rc.1+build.11.0.4d.7f1.0.4d.7f+0.3.7

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

推荐PyPI第三方库


热门话题
java引用MediaPlayer中断脚本?NullPointerException(JavaFX)   用于查找字符串的java正则表达式模式包含一些单词,而没有其他单词   使用Jfreechart和Runnable接口在java上显示实时数据的多线程处理   java如何在获取imei信息时获取dialogFragment中的上下文   安卓 Java在一个循环中打印每个i   apache kafka主题上的java流媒体没有输出   java是在Akka中模拟大量HTTP连接的最佳方法   java如何使用ibatis注释进行批插入   硬件如何在Linux、Windows和Mac上使用Java+JNI检索硬盘的唯一ID   java声明实例变量并实现getter方法?   java正则表达式和新行   java有没有办法使用安卓的Play Core安装本地apk?   java将Graphics2D绘制到另一个Graphics2D   使用Spring和Glassfish的JtaTransactionManager的java JNDI初始上下文   java是一个JPanel问题   网络Java UDP数据包丢失。50%   java如何从字符串正则表达式中提取数据   java 安卓不录制或编码声音