.gitignoreに.gitignoreが追加できる
cowfish :: ~repog/gitignore-test » git init Initialized empty Git repository in /Users/cynipe/var/repos/git/gitignore-test/.git/ cowfish :: ~repog/gitignore-test ‹master› » touch .gitignore cowfish :: ~repog/gitignore-test ‹master*› » cowfish :: ~repog/gitignore-test ‹master*› » echo ".gitignore" > .gitignore cowfish :: ~repog/gitignore-test ‹master› »
git-svnでいつも.git/info/excludeに書いてたんだけどこっちのがいいね!
Capistranoでタスクの実行中にユーザを切り替える
Capistranoって簡単なインストールスクリプトとか書く際には便利なんだけどユーザの切り替えどうするのがいいかな?なんて思って調べてみたら、以下のサイトがヒット。
http://www.pgrs.net/2008/8/6/switching-users-during-a-capistrano-deploy
そのものズバリな解答がのっていたのだけど、パスワードは入力させたかったので↓な感じにしてみた。
# helpers {{{ def with_user(new_user, &block) old_user, old_pass = user, password set :user, new_user set :password, Capistrano::CLI.password_prompt("password[#{new_user}]: ") close_sessions yield set :user, old_user set :password, old_pass close_sessions end def close_sessions sessions.values.each { |session| session.close } sessions.clear end # }}} # sample task task :multi_user_task do run "whoami" with_user "user2" do run "whoami" end end
便利!
超絶簡単なJenkinsコマンドラインクライアント作ってみた
https://github.com/cynipe/domo
仕事でちょいと使いたかったので作ってたやつをまとめてgem化してみた。rubyで作ったのはrubyを勉強してみたかったからというのと、別のツールの関係でシェルとの親和性が高い言語にしたかったというのが理由。実装内容は超絶簡単なのでJenkinsAPIはこんなに気軽に使えるよ!っていう例になるといいかなーとか。
ちなみにPluginの自動インストール機能もあったりするけど、PluginをインストールするAPIは内容なので画面操作させてインストールしているという無茶具合。まぁ、用途的には問題ないのでこれでよし。jenkins-cli.jarを使えば正攻法でインストールも出来るんだけど、rubyからjava叩きに行くのものなぁというのもあってこの手法*1。
世の中的にはjenkins.rbといういけてるツールもあるんだけど、簡単にいじれて適当にその時必要なものを追加したい程度のものが欲しかったので。
ていうかhighlineとかthorとかいいね!こんなに簡単にCLIのサポートしてくれるライブラリがあるなんて感動。ツール周りではますますrubyにお世話になりそうです。
使い方の一部紹介
インストールはgem install domoしてください。
list 指定のJenkinsのジョブの一覧を取得してコンソール上に表示します。 例:: $ domo list http://localhost:8080 trigger Jenkins上にあるジョブのうち指定されたジョブを実行します。 例:: $ domo trigger http://localhost:8080 job-list.txt toggle_all Jenkins上にある全てのジョブのを有効/無効化します。 例:: $ domo toggle_all http://localhost:8080 enable $ domo toggle_all http://localhost:8080 disable toggle Jenkins上にあるジョブのうち指定されたジョブを有効/無効化します。 例:: $ domo toggle http://localhost:8080 enable job-list.txt $ domo toggle http://localhost:8080 disable job-list.txt clone Jenkinsから別のJenkinsへジョブ名一覧ファイルを元にをクローンします。 例:: $ domo clone http://localhost:8080 http://anotherhost:8080 job-list.txt ジョブ名の一覧はlistコマンドを実行結果を利用して作成できます。 例(ジョブ名ファイル作成):: $ domo list http://localhost:8080 > job-list.txt delete_all 指定のJenkins上にある全てのJobを削除します。 例(dryrunモード):: $ domo delete_all http://localhost:8080 例(実際に実行):: $ domo delete_all http://localhost:8080 --dryrun false delete 指定のJenkins上にあるジョブのうち指定されたジョブを削除します。 例(dryrunモード):: $ domo delete http://localhost:8080 job_list.txt 例(実際に実行):: $ domo delete http://localhost:8080 job_list.txt --dryrun false install 指定のJenkinsに対してプラグイン一覧ファイルを元にプラグインをインストールします。 プラグインファイルにはJenkinsの `インストール可能なプラグイン` ページにある チェックボックスのname属性値を1行毎に記述してください。 例:: $ domo install http://localhost:8080/ plugin_list.txt
*1:実装当時しらなかったというのもある
git-svnでdcommit後に誤ってamendした場合の対処法
git-svnでローカルとリモートサーバーの整合性が取れなくなったけど。 - このブログは証明できない。 を見たところから話が広がって、dcommit後にamendしちゃったらどうすりゃいいの?を調べてみた。
ストーリー的にはつまりこういうこと。
$ git svn clone -s http://example.com/svn/repo $ cd repo $ echo "hoge" > hoge $ git add hoge && git ci -m "hoge" $ git svn dcommit $ echo "foo" >> hoge $ git ci -a -amend $ git svn dcommit # ここで以下のように怒られる Merge conflict during commit: File or directory '.' is out of date; try updating: resource out of date; try updating at /usr/local/Cellar/git/1.7.5.1/libexec/git-core/git-svn line 579
で、どうするかというと
$ git reset HEAD@{1} $ git ci -am "foo" $ git svn dcommit
これでOK!
参考にした記事: http://labs.timedia.co.jp/2011/02/git-various-undo.html