[Momonga-devel.ja:00090] 不要なパッチ類の掃除 (Re: PostgreSQL7.2.Xのエンコーディング関連パッチについて)


かずひこ@ 重箱の隅つつき担当 です。

At Sat, 13 Jul 2002 16:14:30 +0900,
OZAWA -Crouton- Sakuro wrote:

> これって、7.0.xや7.1.xというバージョンがファイル名に含まれるパッチファイル
> のことですか? だとすれば、現在のバージョンにもなお有効で、実際にビルドに使
> 用されているからこそ残っているのではないかしらん?
> # 不要になったパッチをremoveしないでほっとく人もいるかもしれませんが……

というのを見つけて消して cvs rm して cvs ci する (ためのスクリプトを出力
する) スクリプトを書いてみました。もともと cvs に入れていなくて手元にの
みあるファイルはあえて対象にしていません。やっていることは、できた srpm
に入っているファイルリストと、そのパッケージのディレクトリの CVS/Entries
のファイルリストの差分をとり、そこからさらに TO.Zoo や Antenna などの必
要なファイルを引いて、残りを出力しているだけです (必要なファイルリストが
いまいち全網羅しているか自信なし)。

末尾のスクリプトを listunused.rb とでもしてセーブして、
「まず pkgs のディレクトリに移動して」から、
ruby listunused.rb 「チェックしたいものの srpm (複数可)」
としたらできます。

例:
$ cd pkgs
$ ruby ~/bin/listunused.rb ~/PKGS/SRPMS/[B-D]*rpm
rm BZFlag/bzflag.cpml.patch
cvs rm BZFlag/bzflag.cpml.patch
cvs ci -m 'delete unused source(s)' BZFlag/bzflag.cpml.patch
rm Canna/Canna35b2-egcs.patch
cvs rm Canna/Canna35b2-egcs.patch
cvs ci -m 'delete unused source(s)' Canna/Canna35b2-egcs.patch

という感じです。この出力を実行すれば O.K. というわけです。

もちろん、各メンテナの意図もあるでしょうから、むやみやた
らに全パッケージについて一気にお掃除しちゃうようなことはしないほうがいい
のは言うまでもありませんし、スクリプトにバグがあるかもしれません。

特に、
%ifarch alpha
Source10: foo-alpha.patch
%endif
みたいなことをやっていたら (やるべきではないことだと思いますが)、環境に
よっては必要なはずのファイルを誤って消すこともありえます。

くれぐれもご利用の際は慎重にお願いします。

# とりあえず eb でやってみた。
-- 
かずひこ@...
  ふぇみにん日記       http://www.fdiary.net/~kazuhiko/diary/
  GK Kyoto Inc.        http://www.gk-kyoto.com/
  Momonga Linux        http://www.momonga-linux.org/
  電子辞書オープンラボ http://openlab.jp/edict/
  電子書体オープンラボ http://openlab.jp/efont/


#!/usr/bin/env ruby

$CONF_FILES = ["./.OmoiKondara","~/.OmoiKondara","/etc/OmoiKondara.conf"]
$KEEP_FILES = ["TO.Nonfree","TO.Zoo","SRPM.ONLY","Antenna","SRPM.ONLY",
  "REMOVE.PLEASE","SU.PLEASE","DISPLAY.PLEASE","YUKARI","NO.CCACHE",
  "OBSOLETE","JAVA","IPv6"]
# and NOT.*, REMOVEME.*

def source_list (pkg)
  return `rpm2cpio #{pkg} | cpio --list 2> /dev/null`.split(/\n/)
end

def rpm_name (pkg)
  pkg =~ /^.+\/(.+)-([\w\.\+]+)-([\w\.\+]+)\.(.+)\.rpm$/
  return $1
end

# main

$pkgs_list = ARGV

$pkgs_list.each do |pkg|
  name = rpm_name (pkg)
  entries = `cat ./#{name}/CVS/Entries | grep -v '^D' | sed -e 's,^/,,' -e 's,/.*,,' | grep -v '^NOT\.' | grep -v '^REMOVEME' `.split(/\n/)
  unused = (entries - source_list (pkg) - $KEEP_FILES)
  if (unused.length != 0)
    files = unused.join(" #{name}/")
    print "rm #{name}/#{files}\n"
    print "cvs rm #{name}/#{files}\n"
    print "cvs ci -m 'delete unused source(s)' #{name}/#{files}\n"
  end
end