portupgrade -an の結果を整形
重たいのは承知のうえで富豪手抜きアプローチ。こんな感じで。
#! /usr/bin/env ruby
# -*- ruby -*-
print "Have you executed CVSUP recently ?\n"
print "Please wait for a while. Take coffee break ;-)\n"
needupgrade = Hash.new()
cmd = open( '| sudo portupgrade -an 2>&1' )
while line = cmd.gets
if ( line =~ /Upgrading '(.*)' to '(.*)'/ )
needupgrade.store( $1, $2 )
end
end
cmd.close()
if ( needupgrade.size > 0 )
maxlength = 0
needupgrade.keys.each { |string|
if ( string.length > maxlength )
maxlength = string.length
end
}
needupgrade.keys.sort.each { |pkg|
printf( "%-*s --> %s\n", maxlength, pkg, needupgrade[pkg] )
}
else
print "All ports are up-to-date ! Congratulation !\n"
end
STDERR をリダイレクトしてるのは no need な upgrade の情報が STDERR に出ちゃうのでそれをカットするため。
これでインストール済みの ports のうち、アップデートがあるものをリストアップできる。もちろん cvsup はしてないとダメだし、pkgdb が矛盾してて portupgrade の出力が途中で止まった場合のことは考慮してません。
名づけて listupgrade かな?