2014-11-26 8 views
1

Macports가 최근 버전인지 확인하기 위해 Macports가 두 버전을 비교하는 방법을 알아 내려고 노력하고 있습니다. 그러나 이에 대한 문서를 찾을 수 없었습니다. 예를 들어 portfile reference에는 이에 대한 세부 정보가 없습니다. 나는 일반적인 버전 관리에 패치 버전을 사용하는 응용 프로그램을 패키지하려고하기 때문에 묻습니다. 이것은 1.2_alpha1 < 1.2_rc3 < 1.2 < 1.2_p1 (http://devmanual.gentoo.org/ebuild-writing/file-format/) < 1.2_alpha2 < 1.2_beta로, MacPorts를 추가 버전 정보를 지정할 수 있습니다 젠투이 빌드, 유사한 시스템을 지원하는 경우 나 궁금했다.Macports는 최근 버전을 어떻게 결정합니까?

어떤 시스템 Macport가 사용하는지 설명하는 표가 있습니까? 또는 기본 점 분리 버전 관리 체계 (예 : 1.2.1) 만 지원합니까?

답변

2

MacPorts의 버전 번호 비교는 RPM의 원래 알고리즘을 기반으로합니다. 현재 1.2 > 1.2$something이되는 수정자를 지원하지 않습니다. 두 버전 문자열을 비교하는 동안 영숫자가 아닌 문자는 분리 기능을 제외하고 무시됩니다. 이것은 1.2.3 == 1-2_3이됩니다.

문제를 해결하려면 epoch 필드를 사용할 수 있습니다.이 필드는 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}." 
} 
관련 문제