<< 2005/11/ 1 1. Safari 2.0.2 が Acid2 をパスするらしい
2 1. blog本文の文字サイズの話
3 4 1. 早い話がグローバル変数なんか使ってんじゃねぇぞ、と
5 1. クリアな問題点を確認する
6 7 1. OSX で system() が返す status がちょっと変
8 1. よーしパパ6系にしちゃうぞ
9 10 1. GUI だけが便利なんじゃないよね
2. 長年日記を有効にしてみた
11 12 1. IP Messenger for Eclipse
13 1. PStore のバックアップがなくなっていた。
14 1. Xen て比較的新しくないとダメなのね
2. 日本人と英語
3. 初めての FreeBSD 6
15 16 1. aamall.jp ネタ
2. 初めての FreeBSD 6 その2
17 1. ダメなメール
18 1. samba と netatalk
2. 半日以内…
19 1. 何かの拍子に文字が入らなくなる
2. まこと先輩は高橋さんだ
3. 技術の必要性を現場が分かってなきゃどうしようもないというか
20 21 1. listupgrade 20051121
2. New www.freebsd.org's font-size is too small !
22 23 1. listupgrade 20051123
24 1. samba と netatalk その2
25 1. netatalk2 で Finder からパスワード変更できない
2. netatalk on nfs
26 27 28 29 1. afp on nfs は nfs 直書きより速い感じ
30 >>
トップ «前の日記(2005-11-19) 最新 次の日記(2005-11-23)» 編集

2005-11-21 [長年日記]

_ listupgrade 20051121

portversion の出力じゃバージョン番号が分からなくてイヤんなので、かたくなにそれっぽいツールを自作してるという自己満足に浸るオレ様がきましたよ。

1年前の自分と比べると、

  1. 短いのにクラスとか使っちゃって OO かぶれのつもりかこの野郎
  2. でも短いメソッドに分解できて読みやすくて嬉しいわ
  3. ブロックを使って while を書かなくなった
  4. portversion と組み合わせた方が portupgrade -an 一本槍より少しは速かろう

の辺りに成長が見られるでしょうか。FreeBSD + portversion + portupgrade な環境にべったり依存したスクリプトなので使ってない人は華麗にスルーしてください。

#! /usr/bin/env ruby
# -*- ruby -*-

if ( (`which portversion`.chomp.size < 1) or
       (`which portupgrade`.chomp.size < 1) )
  abort "You need to install portupgrade first !"
end

puts "Have you executed PORTSNAP or CVSUP recently ?"
puts "Please wait for a while."

#
# Manipulating Upgradable Ports 
#
class UpgradablePorts

  def initialize
    @needupgrade   = Hash.new()
    @pkgdb_correct = false

    make_list()
    store_versions()
  end # of new()

  #
  # List up upgradable ports with 'portversion' command
  #
  # without version detail
  #
  def make_list()
    open( '| portversion' ).each { |line|
      if ( /^([^\s]+)\s+\</ =~ line )
        @needupgrade.store( $1, false )
      end
    }
  end # of make_list()

  #
  # Storing two version infos, current installed one and latest one 
  # with 'portupgrade -n' command
  #
  def store_versions()
    @needupgrade.each_key { |port|
      open( '| portupgrade -n ' + port + ' 2>&1' ).each { |line|
        if ( /Upgrading '(.*)' to '(.*)'/ =~ line )
          @needupgrade.store( $1, $2 )
        elsif ( /Listing the results/ =~ line )
          # This line will appear if portupgrade terminate normally.
          @pkgdb_correct = true
        end
      }
    }
  end # of store_versions()

  #
  # Output result
  #
  def output()
    if ( @needupgrade.size > 0 )
      maxlength = 0
      @needupgrade.each_key { |portname|
        if ( portname.length > maxlength )
          maxlength = portname.length
        end
      }
      
      @needupgrade.keys.sort.each { |port|
        if ( @needupgrade[port] != false )
          printf( "%-*s --> %s\n", maxlength, port, @needupgrade[port] )
        end
      }
    elsif ( @pkgdb_correct == true ) 
      puts "All ports are up-to-date ! Congratulation !"
    else
      puts "Something wrong with ``pkgdb'', maybe ? "
    end
  end # of output()

end # of class UpgradablePorts

#
# main()
# 
list = UpgradablePorts.new()
list.output()
Tags: Tool

_ New www.freebsd.org's font-size is too small !

日本語版も順次移行してるみたいなんだけど、

  • Normal Text って CSS では font-size: 69%
  • Large Text でも font-size: 93%

何考えてんだ。

Tags: Web
本日のツッコミ(全4件) [ツッコミを入れる]
_ typer (2005-11-22 18:38)

>portversion の出力じゃバージョン番号が分からなくて
portversion -vで大体同じ結果が得られると思います。

_ wtnabe (2005-11-22 19:16)

orz
これを元に up-to-date の行を削った方がはるかに速いですね。しかもチョー初歩的なフィルタで済むし。(あくまで整形したい病)

_ typer (2005-11-22 21:28)

えーっと、整形したい病の方に奨めると禁断症状がでるかも知れないオプションに"-L ="とかあったりして(笑)

_ wtnabe (2005-11-22 21:56)

な、なんて半端な…。整形してやる!

本日のTrackBacks(全1件) [TrackBack URL: http://aligach.net/diary/tb.rb/20051121]

シンプルで速い awk バージョンができました