gedit の外部ツールに「新しい%changelogを挿入」を追加

[追記 2009/09/21]Henrich 氏のコメントを受けて、一部を修正しました。

普段 Emacs しか使わないのですが、たまたま gedit で spec ファイルを開いてみたら、各タグに色付けがしてあり見易かったので、%changelog を自動挿入する機能があるかな?と思いきや何もありませんでした。

とりあえず思いつきで作ってみました。

ここでは仮に input-changelog-gedit.sh としておきます(2008/12/31 に修正,さらに 2009/01/15 に僅かな修正)。

#!/bin/sh

## input new %changelog format of rpm spec file for gedit
## Time-stamp: <2008-12-31 08:16:51 munepi>

DATE=`LANG=C date '+%a %b %d %Y'`
PACKAGER=`cat $HOME/.rpmmacros | grep '^%packager' | sed 's/%packager[[:blank:]]*//'`
_DIST_RELEASE=`cat /etc/vine-release | cut -f3 -d" " | cut -f1 -d.`
COMMENT="- new upstream release"

set -e
tmp=`mktemp`
trap cleanup EXIT
cleanup() {
    set +e
    [ -z "$tmp" -o ! -d "$tmp" ] || rm -f "$tmp"
}

cat $@ > $tmp

PKG_VERSION=`rpm -q --queryformat %{version}-%{release}"\n" --specfile $tmp | head -1 | sed "s/vl${_DIST_RELEASE}$//g"`

cat $tmp | sed "s/%changelog[[:blank:]]*$/%changelog\n* ${DATE} ${PACKAGER} ${PKG_VERSION}\n${COMMENT}\n/"

exit

### end of file

上記スクリプトの通り、「cat $@」方式ですので、コマンドラインから使う場合、

$ input-changelog-gedit.sh input.spec > output.spec

あるいは、

$ cat input.spec | input-changelog-gedit.sh > output.spec

です。gedit の外部ツールとしては、後者として実行されているようです。