App::ginitというコマンドを書いたッ!

gitリポジトリを公開していない、ないしリポジトリがgitでないソフトウェアのソースコードをちょっといじりたいことがあります。そんなときは、大体以下のようにしてgitリポジトリを初期化してからソースコードをいじり始めるのがよくある方法だと思います。

$ curl -LO http://example.com/great-software-2.0.tar.gz
$ tar xzf great-software-2.0.tar.gz
$ cd great-software-2.0
$ git init
$ git add .
# どこからとってきたのか明記する
$ git commit -m "Initial import from http://example.com/great-software-2.0"
# git diff initial で簡単にpatchを作れるようにする
$ git tag initial
# 最初のimport versionもタグにしておく
$ git tag great-software-2.0

こんなのいちいち面倒くさいですね。誰か一つのコマンドにまとめてくれないかと思ったのですが…

@__gfx__:
「〜というコマンドがほしい」…そんな言葉は、使う必要がねーんだ。なぜなら、オレやオレたちの仲間は、その言葉を頭の中に思い浮かべたときには!実際にコードを書いちまって、もうすでに終わっているからだ!だから使ったことがねェーーーッ!「〜というコマンドを書いた」なら使ってもいいッ!

という言霊が降ってきたので、書きました。
http://github.com/gfx/App-ginit
以下のように、URIないしファイル名を渡すとimportと最初のタグ付けをしてくれます。

$ ginit http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/DBD-SQLite-1.30_03.tar.gz
Initialized empty Git repository in /home/s0710509/perl/repo/App-ginit/DBD-SQLite-1.30_03/.git/
[master (root-commit) 14162d7] Initial import from http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/DBD-SQLite-1.30_03.tar.gz
 82 files changed, 137181 insertions(+), 0 deletions(-)
 create mode 100644 Changes
 create mode 100644 LICENSE
(snip)
Looks good. Try `cd DBD-SQLite-1.30_03`

これでgitリポジトリを公開していないソフトウェアに対しても簡単にパッチを書き始められますね!
なお、githubにあるリポジトリの操作にはApp::ghが便利です。