.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

BundleのGemfile.lockはリポジトリに置いちゃだめっぽい

Macで作ったRubyのツールがWindowsで動かなくてはまったんだけど、理由はともかくもGemfile.lockをMacで作ったのをそのまま使うとロード時にエラーになってしまう。Issues を見てみても結構昔からある戦いのご様子?Windowsでも使う場合を考えるとGemfile.lockはignoreしとくのが吉。

sedで複数行削除

とあるxmlのhogeタグごとその中身を削除したかったので調べた。

sed -i -e "/^<hoge>$/,/^<\/hoge>$/d" target.xml

カンマなんて考えもしなかった。sedって結構色々出来るみたいですね。いつも行内置換くらいにしか使ってないから分からなかったよ・・・。

VirtualBoxでクローン

対象とするvdiを指定してコマンドラインでクローン。vdiの場所はVMをShutdownして設定>ストレージ>ストレージツリー>SATAコントローラからツールチップで見れる。

$ VBoxManage clonehd  /pat/to/src.vdi path/to/dest.vdi