git-gsub v0.0.6をリリースした
リポジトリ内のファイルを一括置換するGitのサブコマンドgit-gsub
の新しいバージョンをリリースしました。
なかなか便利になったと思うのでお試しください。
新機能
ファイル名の変更も一緒にできるようになった
クラス名を変えたい時はgit gsub Foo Bar
とファイル内の文字列を置換した後、ファイル名をgit mv
なりで別途変更する必要がありました。これは非常に面倒。なので、--rename
オプションを渡すとファイル名も変更するようにしました。
内部的には
for f in $(git ls-files | grep Git::Gsub) do mkdir -p $(dirname $(echo $f | sed 's/Git::Gsub/Svn::Tr/g')) git mv $f $(echo $f | sed 's/Git::Gsub/Svn::Tr/g') 2>/dev/null done
というようなスクリプトを実行しています。
実験的な機能としてSnake/Camel/Kebab caseに変換した文字列も置換するようにした
例えばRailsプロジェクトだと OrderDetail
ってモデルがあると、 order_detail
という変数があり、 order-detail
というDOMのクラス名があったりします。これをそれぞれ置換するのは面倒なので、--snake
、--camel
、--kebab
というオプションでそれらも一括で置換するようしました。
--rename
オプションで行う置換にも適用されます。これによってRailsプロジェクトのモデル名変更がコマンド一発でほぼ完了するようになりました。
ただこれ、ActiveSupport::Inflectorを使っていて、これが下記のようなRubyっぽい変換をします。これは他の言語では迷惑なはず。 「実験的」としているのはこのためです。なんとかしたい。
'ActiveModel::Errors'.underscore # => "active_model/errors"
変更点
sedで行っていたファイル内の文字列置換をPerlに書き換えました。これでgsedが入っていないと使えないって不具合もなくなったはず。もともとsedの文字列置換機能はPerl由来である、など教えてくれた @knu に感謝です。