VineSeed ML アーカイブ



[VineSeed:17881] Re: 【コメント募 集】gtk icon-theme.cache の更新方法

  • From: Daisuke SUZUKI <daisuke@xxxxxxxxxxx>
  • Subject: [VineSeed:17881] Re: 【コメント募 集】gtk icon-theme.cache の更新方法
  • Date: Fri, 19 Jun 2009 03:13:51 +0900
鈴木です。

On Thu, 18 Jun 2009 22:44:04 +0900
HARADA Kazutaka <kazutaka@xxxxxxxxxxxxxxxx> wrote:

> (2009年06月14日 01:12), HARADA Kazutaka さんは書きました:
> > で、これを改善する方法を考えてみているのですが、
> > 案1. apt のスロットにスクリプトを仕込んで、install/remove の
> >      後に自動的に  gtk-update-icon-cache を実行
> > 案2. cron で daily でチェックして gtk-update-icon-cache を実行
> > 辺りを思いついたものの、もっと良い方法が無いかなと。
> 
> とりあえずこんな感じのスクリプトを回そうと考えています。

出遅れましたが、Mandriva では filetriggers をつかってこれらの
処理をしているようです。(patchが必要なのでちょっと。。)
http://wiki.mandriva.com/en/Rpm_filetriggers
パターンにマッチしたファイルが更新された場合に、処理を実行する
という感じらしいです。オーバーヘッドが大きそうなので、微妙かも
しれません。

> ---<ここから>---
> #!/bin/sh
> 
> for d in `find /usr/share/icons -maxdepth 1 -type d`; do
>     if [ ! -e "$d/index.theme" ] ; then
>         # if cache is not genereted, then create it
>         /usr/bin/gtk-update-icon-cache --quiet --ignore-theme-index $d
>     elif [ `find "$d" -type f -newer "$d/index.theme" > /dev/null` ] ; then
>         # if cache is exist but not up to date, then update it
>         /usr/bin/gtk-update-icon-cache --quiet --ignore-theme-index $d
>     fi
> done
> ---<ここまで>---
> 
> find で cache ファイルとのタイムスタンプを比較しているので、
> 最新の状態に cache が更新されていれば、チェック自体は
> 一瞬で終わりますから、cron で daily で回しても問題無い
> レベルだと思います。

>     if [ ! -e "$d/index.theme" ] ; then
>     elif [ `find "$d" -type f -newer "$d/index.theme" > /dev/null` ] ; then
cache は index.theme じゃなくて、icon-theme.cache ではないですか?

あと、実際に icon がはいっていない Inherits でほかのテーマを指定
しているだけのテーマだと毎回 gtk-update-icon-cache が走ってしま
いますね。まあすぐおわるので問題はないとはおもいますが。。

それから、タイムスタンプだけだとダメかもしれません。アイコンファイルは
元のタイムスタンプが保存されているので、古いタイムスタンプのファイルが
追加されても更新されなくなってしまいます。
# %post とかで実行しているときに touch しているのはそのためです

結構微妙な問題というか、、%post に trigger 用のファイルかなんかをtouch
させるように仕込んで、apt にまとめて処理させるというのがいいかもしれま
せん。(既存のテーマに新たについかされるケースは hicolor がほとんどなの
で、全部のテーマをチェックしなくてもhicolorだけキャッシュつくりなせば
十分という気もしなくもないです)

> 後、/usr/share/themes にも同様に cache を作っておくと良い
> らしいので、実際のスクリプトではこちらも cache を作るように
> しようと考えています。

themes には cache いらんのではないでしょうか。

-- 
Daisuke SUZUKI | daisuke@{linux.or.jp,dicey.org,vinecaves.com}
GnuPG Fingerprint = 7DE6 9AC6 5E5B 1AF8 B38E  0992 90BF 4C09 7432 2CB0
Founder & President, Project Vine.            http://vinelinux.org/
Founder & President, Vine Caves, Ltd.         http://vinecaves.com/
Founder & Trustee, Japan Linux Association.   http://jla.linux.or.jp/