Macports如何确定哪个版本更新?

时间:2014-11-26 18:01:54

标签: versioning macports

我正在试图弄清楚Macports如何比较两个版本以确定哪一个是最近的版本,但我无法找到任何相关的文档。例如,portfile reference没有任何关于此的详细信息。我问,因为我正在尝试打包除正常版本之外还使用补丁版本的应用程序。这让我想知道Macports是否支持与Gentoo ebuild类似的系统,其中可以指定其他版本信息,例如1.2_alpha1< 1.2_alpha2< 1.2_beta< 1.2_rc3< 1.2< 1.2_p1http://devmanual.gentoo.org/ebuild-writing/file-format/)。

是否有表格描述Macports使用的系统?或者它是否仅支持基本的点分隔版本控制方案(例如1.2.1)?

1 个答案:

答案 0 :(得分:2)

的MacPorts'版本号比较基于RPM的原始算法。它目前不支持使1.2 > 1.2$something的修饰符。在比较两个版本字符串时,除了分隔函数之外,忽略非字母数字字符。这使1.2.3 == 1-2_3

要解决您的问题,您可以使用epoch字段,每当版本号移动时,您都需要增加该字段,并且#34;向后"根据MacPorts'版本比较算法。

为了将来参考,版本比较的源代码位于https://svn.macports.org/repository/macports/trunk/base/src/pextlib1.0/vercomp.c。如果您需要测试两个版本号,而无需手动运行此代码,则可以使用Ryan's vercmp script。请注意,他的脚本目前尚未更新,无法使用MacPorts'新捆绑的tclsh。固定版本如下:

#!/usr/bin/env port-tclsh

# Runs vercmp with the two version numbers provided to see which is newer.

package require macports 1.0
mportinit

if {${argc} != 2} {
    ui_error "usage: [file tail ${argv0}] version1 version2"
    exit 1
}

set version1 [lindex ${argv} 0]
set version2 [lindex ${argv} 1]

set cmp [vercmp ${version1} ${version2}]

if {${cmp} < 0} {
    ui_msg "MacPorts considers ${version1} to be less than ${version2}."
} elseif {${cmp} > 0} {
    ui_msg "MacPorts considers ${version1} to be greater than ${version2}."
} else {
    ui_msg "MacPorts considers ${version1} to be equal to ${version2}."
}