2012-12-04 5 views
0

저는 RPM이 어떤 패키지의 최신 버전을 어떻게 인식하는지 알아 내려고하고 있습니다.RPM 저장소의 최신 버전을 인식하는 프로세스는 무엇입니까?

package-0.1-SNAPSHOT201212031 
package-0.2-SNAPSHOT201212030 

윌 RPM 관리자가 단지 문자열로 비교하거나 뒤에 좀 더 논리가 위치 : 내가이 말? 또 다른 예 : 0.10.1이 0.1.1보다 새로운 것으로 인식합니까? (문자열 비교는 도움이되지 않습니다).

답변

1

RELEASE 필드에이없고 은 대시가 없습니다.

고려 :

rpm -qi hwdata 

는 릴리스 태그 규칙에 참조 할 수 있도록이 문서의 The Release Tag 섹션을 참조하십시오

$ rpm -q hwdata --queryformat '%10{NAME} %20{VERSION} %20{RELEASE} %20{ARCH}\n' 
hwdata    0.213.22    1.el5    noarch 

하였다.

참고 : 참고로, specfile에 rpm-tag이없는 경우 프로그래밍 방식으로 물건을 rpm 설명에 넣는 경우가 있습니다. 귀하의 마일리지가 다를 수 있으며, 어색하기 때문에 지역 사회에 다시 돌아올 패키지에 대해서는 권장하지 않습니다. 그냥 rpm에서 작동하는 다양한 도구를 제동에서 해결할 해결 방법으로 지적.

주 2 : RELEASE 필드에 개정 관리 번호를 사용하는 것이 일반적입니다. 이것은 rpm 컨벤션에서 약간 깨지는 동안. (해당 필드를 수정하면 specfile이 변경된 것입니다 ... 내용이 아닙니다.) rpm 도구가 손상되지 않고 내용 버전을 직접 참조 할 수 있으므로 사용하기 쉬운 필드입니다. 또한 ... rpm 콘텐트가 리비전 제어 시스템에 체크인되어 있다면, 이것은 이미 rpm 모델 바깥에서 조금씩 움직이고 있습니다. I.E. 근원 rpm는 불필요하게된다.

0

이전 게시물 이었지만, 나는 이걸 내려 놓으려고 노력해 왔고, 내가 일하는 양식을 나에게 나누어 줄 것이라고 생각했습니다. String 클래스의 확장자를 가진 ruby ​​스크립트를 사용하고 있습니다.

class String 
    def explode 
    self.split(/-|_|\./).collect {|i| if i == "0" || i.to_i > 0; then i = i.to_i; end; i} 
    end 
end 

이 번호의 그룹 (아닌 문자열로 방치 이하) 정렬 가능한 수치로 변환되는 배열로 지정된 문자열 나누기.

:

ruby -r./string_ext.rb -e ' puts %Q{package-0.1-SNAPSHOT201212031}.explode.inspect' 
#=> ["package", 0, 1, "SNAPSHOT201212031"] 

ruby -r./string_ext.rb -e ' puts %Q{package-0.2-SNAPSHOT201212031}.explode.inspect' 
#=> ["package", 0, 2, "SNAPSHOT201212031"] 

# the comparison of the resulting arrays is then very straight forward 
ruby -r./string_ext.rb -e ' puts %Q{package-0.1-SNAPSHOT201212031}.explode <=> %Q{package-0.2-SNAPSHOT201212030}.explode' 
#=> -1 

-1 첫 번째 항목이 초 미만인 것을 의미하고, 0들은 동일한 의미하고, 1 번째 항목은 제 미만인 것을 의미한다. (동일한 패키지와 관련된 RPM의 배열 등)과 유사한 항목의 배열에서 최대 값을 수집하는 것이 매우 간단이 방법을 사용

1 <=> 2 #=> -1 
2 <=> 2 #=> 0 
3 <=> 2 #=> 1 

.

관련 문제