すげー遅い。ものすごい時間掛かる。これなら listupgrade の富豪アプローチの方がまだ速い。portsdb を利用した portversion が速くてもインデックス起こすのがここまで遅いとちょっと考えるなぁ。頻繁にやってればそんなに遅くないのかな。

ただ pkgdb が矛盾してると listupgrade はまったく機能しなくなるので注意が必要。あ、矛盾したときのメッセージは拾えるようにしておけばいいのか。

ちゅーことで listupgrade 20041104

#! /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()
results = false

cmd = open( '| sudo portupgrade -an 2>&1' )
while line = cmd.gets
  if ( line =~ /Upgrading '(.*)' to '(.*)'/ )
    needupgrade.store( $1, $2 )
  elsif ( line =~ /Listing the results/ )
    results = true
  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] )
  }
elsif ( results )
  print "All ports are up-to-date ! Congratulation !\n"
else
  print "Something wrong with ``pkgdb'', maybe ?\n"
end

正常に終われば最後に結果の一覧がずらずらと出るはず、という作り方。Upgrade の必要な ports はないが、そもそも結果一覧の表示がない場合は portupgrade がなんかトラブってるんじゃないか、と推測。たいがいは pkgdb の問題なのでそういうメッセージを出すようにした。

More