GitからLighthouseにチェンジセットを送る

Posted by yatsu Fri, 10 Oct 2008 08:09:11 GMT

GitからLighthouseにチェンジセットを自動で送る方法を探してみたのですが、ちょうどよいものが見つけられなかったので、自分でちょっとしたpost-receiveスクリプトを書いてみました。

例として、以下のような環境を用意します。

% mkdir project
% cd project
% git init
% touch README
% git add README
% git commit -m "Initial commit."
% cd ..
% git clone --bare project

これによって project.git ディレクトリができます。 作業レポジトリは project とし、そこから project.git に対して git push したときにチェンジセットがLighthouseに送られるように設定します。

まず、lighthouse-apiを project.git ディレクトリに置きます。

% cd project.git
% git clone git://github.com/Caged/lighthouse-api.git

RubyGemsでGritをインストールします。

% gem install grit

project.git/hooks ディレクトリに以下の post-receive を作ります。

#!/usr/bin/env ruby

require 'rubygems'
require 'grit'
require File.dirname(__FILE__) + '/../lighthouse-api/lib/lighthouse-api'

# ---
account   = 'foo'
permalink = 'project'
tokens    = {
  'foo@example.com' => '03129063afbb21293e71d873dea6362b67fdf81f'
}
# ---

logger = Logger.new(File.dirname(__FILE__) + '/logs/post-receive.log')
logger.level = Logger::INFO

begin
  rev_old, rev_new, ref = STDIN.read.chomp.split(/ /)
  logger.info "[receive] #{rev_old} #{rev_new} #{ref}"

  repo    = Grit::Repo.new(File.dirname(__FILE__) + '/..')
  commits = repo.commits("#{rev_old}..#{rev_new}")

  Lighthouse.account = account
  Lighthouse.token   = tokens[commits.first.committer.email]

  project = Lighthouse::Project.find(:first, :params => { :permalink => permalink })

  commits.reverse.each do |commit|
    logger.info "[post] #{commit.id}"
    diff      = repo.git.diff({ :name_status => true }, rev_old, commit.id)
    changeset = Lighthouse::Changeset.new(
      :project_id => project.id,
      :revision   => commit.id,
      :title      => "Changeset [#{commit.id}] by #{commit.committer.name}",
      :body       => commit.message,
      :changes    => diff.map {|l| l.split(/\t/) }.to_yaml,
      :changed_at => commit.committed_date
    )
    changeset.save
    logger.debug "[data] #{changeset.inspect}"
    rev_old = commit.id
  end
rescue => e
  logger.error "[error] #{e.message}"
end

このスクリプトのaccount, permalink, tokensを実際の値に置き換えます。

  • accountは、LighthouseのURLが http://foo.lighthouseapp.com/ の場合、「foo」
  • permalinkは、Lightouseの「Edit project」のページで設定したPermalink
  • tokensは、Lighthouseのアカウントごとに生成したトークン

トークンの生成方法はLighthouseのサイトで探してください。 このスクリプトが実行されると、git config user.email で表示されるメールアドレスからトークンを引くので、git config user.email が正しく設定されていることを確認してください。

このスクリプトを実行可能にします。

% chmod +x hooks/post-receive

ログのためのディレクトリを作ります。

% mkdir hooks/logs

以上で設定は完了です。

project ディレクトリから commit, push を行い、動作を確認します。

projectディレクトリに移り、originを設定します。

% cd ../project
% git remote add origin ../project.git

READMEを書き換え、commit し、push します。

% git commit -a -m "Modified README."
% git push

これでLighthouseにチェンジセットが送られます。 もし送られない場合は、project.git/hooks/logs/post-receive.log にあるログを参照してください。

例: チェンジセット一覧ページ

例: チェンジセット表示

Posted in  | no comments | no trackbacks

TextMateでGauche

Posted by yatsu Tue, 18 Mar 2008 10:27:41 GMT

『プログラミングGauche』を読んでいます。

TextMateでSchemeを書くには、Scheme.tmbundleを使えばよいのですが、⌘R でファイルを実行するときに gosh を使うには、以下の変更をして、設定の「Advanced」→「Shell Variables」で TM_SCHEME_INTERPRETERgosh とすればいいようです。

diff -uNr Scheme.tmbundle.org/Commands/Run Script.plist Scheme.tmbundle/Commands/Run Script.plist
--- Scheme.tmbundle.org/Commands/Run Script.plist   2008-03-15 15:54:26.000000000 +0900
+++ Scheme.tmbundle/Commands/Run Script.plist   2008-03-15 16:42:15.000000000 +0900
@@ -28,6 +28,8 @@
    "$INTERPRET" -s "$TM_FILEPATH" 2>"$TM_ERRORTEMP" | "$SHOWOUTPUT" "$INTERPRET" "$TM_ERRORTEMP"
 elif [ $CMD = "guile" ] ; then
   "$INTERPRET" -s "$TM_FILEPATH" 2>"$TM_ERRORTEMP" | "$SHOWOUTPUT" "$INTERPRET" "$TM_ERRORTEMP"
+elif [ $CMD = "gosh" ] ; then
+  "$INTERPRET" "$TM_FILEPATH" 2>"$TM_ERRORTEMP" | "$SHOWOUTPUT" "$INTERPRET" "$TM_ERRORTEMP"
 fi

 # Delete tempfiles
diff -uNr Scheme.tmbundle.org/Support/showoutput.rb Scheme.tmbundle/Support/showoutput.rb
--- Scheme.tmbundle.org/Support/showoutput.rb   2008-03-15 15:54:26.000000000 +0900
+++ Scheme.tmbundle/Support/showoutput.rb   2008-03-15 17:02:29.000000000 +0900
@@ -126,7 +126,8 @@
 schemesystem = File.basename(interpreter)

 systems = { "csi"       => "Chicken Scheme",
-            "mzscheme"  => "PLT MzScheme" }
+            "mzscheme"  => "PLT MzScheme",
+            "gosh"      => "Gauche" }

 # Start HTML output.
 printheader(systems[schemesystem], interpreter)

Posted in ,  | no comments | no trackbacks

Norton AntiVirus for Mac

Posted by yatsu Tue, 18 Mar 2008 10:15:36 GMT

Leopard対応のNorton AntiVirus for Macを使ってみました。

AntiVirusを有効にすると、ほぼ1日に1回OSが落ちます……。 こんなに再現性があって致命的な問題がなぜ放置されているのか……。

ということで、もう使っていません。

クラッシュログを置いておきます。

Read more...

Posted in  | no comments | no trackbacks

ドタバタ確定申告

Posted by yatsu Mon, 17 Mar 2008 10:21:33 GMT

  • 申告期限15分前 - 書類完成
    • 確定申告書B(第一表、第二表)
    • 決算書/収支内訳書
  • ε=ε=┏( >_<)┛
  • 申告期限5分前 - セブンイレブンでプリントアウト(ネットプリント)
  • 申告期限30秒前 - プリントアウト完了
  • ε=ε=┏( >_<)┛
  • 申告期限ちょっと過ぎてるっぽい - 書類提出
  • 裏口から退出

久しぶりに全力で走った。

時間がなくて保険などの控除を書く暇がなかった。 係の人に「(控除などが)なんにもないんですね〜」と呆れられた。

「でも、これだけわかっていれば大丈夫でしょう」
(「それはソフトが勝手に書いてくれました……」)

来年からしっかりやろう……。

Posted in  | no comments | no trackbacks

Firefox 3に移行

Posted by yatsu Mon, 03 Mar 2008 11:36:25 GMT

今までFirefox 2を使っていましたが、Forefox 3.0b3に移行しました。 Macでは動作が軽くなり、見た目もかっこよくなって、すばらしいです。 Firefox lzyc buildにあるIntel Mac最適化版を使わせていただきました。

なぜかページソースを見ようとしても何も起きないので(何か変な拡張を入れたかも)、ViewSourceWithを使って任意のエディタ(自分の場合、CotEditor)でソースを開くようにして解決しました。

対応していない機能拡張はNightly Tester Toolsでむりやり動作させました。

しかし、keyconfigだけはそのままではダメでした。 keyconfig 20071212.2 日本語版であればFirefox 3で使えるのですが、「新しいキーを追加」でダイアログを開いてから「OK」を押せません。 KeryconfigをFirefox 3 Betaで使えるようにする の最後に書かれている修正 documentgDocument を適用したら直りました。

自分で修正するのが面倒な方はこちらからどうぞ。
keyconfig-20071212.2-ja-modified.xpi

keyconfigはSafariのように「⌘{」「⌘}」でタブ移動するために必要なのです。まだSafariの癖が抜けきれていないという……。

Posted in ,  | no comments | no trackbacks

3-Way Merge

Posted by yatsu Sun, 02 Mar 2008 10:21:57 GMT

TextMateのBlogでChangesというdiffマージツールが紹介されていました。

MercurialでコンフリクトしたときのためのMac OS X用3-Wayマージツールが欲しいと思っていたので少し調べてみましたが、3-Wayはサポートされておらず、Feature Wishlistによると、バージョン2で実装される予定とのこと。

ついでに他のものも探してみたところ、以下のアプリが3-Wayをサポートしているようです。

Araxis Mergeは高すぎ(いくら円高と言っても!)なので、DiffMergeを使用してみましたが、なかなかよい感じです。

Mercurialで使用する場合、付属のコマンドラインツールを /usr/local/bin/diffmerge にコピーし、 ~/.hgrc に以下の設定をするだけで使えました。

[ui]
merge = diffmerge

Posted in  | no comments | no trackbacks

InputHiliter 2.0を公開

Posted by yatsu Sat, 01 Mar 2008 10:43:34 GMT

Mac OS X 10.5でついにAPEが使えるようになりました。 Unsanity.org: Enthusiastic Trepidation からAPE 2.5b1をダウンロードできます。 WindowShade(ウィンドウをタイトルバーだけの表示に切り替えるアプリ)がないと生きていけないので、とても助かりました。 Leopard対応のAPEをリリースするまでの苦労話が上記Unsanityのページで読めます。

ちょうどよい機会なので、拙作のInputHiliterもLeopard + APE 2.5で動作するように作り直し、バージョン2.0をリリースしました。 Mac OS Xで「ことえり」などの入力プログラム(インプットメソッド)で漢字変換(または他の言語の変換)をするときに、変換中の文字に色をつけて強調表示してくれるものです。

InputHiliter
(ホームページも少しマシなものを用意しました)

今回からUnsanity Installerを使わせてもらいました。 APEをインストールしていない場合、インストーラがAPEも一緒にインストールしてくれるので便利です。 Unsanity.org: Pragmatic Disillusionmentによると、Unsanity Installerはサードパーティが自由に使ってよいそうです。ただし、まったくドキュメントがないので、WindowShadeのインストーラをコピーして、試行錯誤する必要がありました。(もし誰か希望する人がいたら、やり方を書いてもかまいません。)

ソースコードの管理はGoogle Codeを使わせてもらうことにしました。

inputhiliter - Google Code

LeopardになってからCocoa APIも少し変わったようで、今まで [NSTextView setMarkedText:selectedRange:] でフックしていたのを、[NSTextView setMarkedText:selectedRange:replacementRange:] に変更する必要がありました。

また、CからObjective-CのLow Level APIを通してNSRange(CFRange)を返す関数を呼び出すとき、PowerPCのときは以下のようにしていたのですが、

CFRange markedRange;
objc_msgSend_stret(&markedRange, inObj,
                   NSSelectorFromString(CFSTR("markedRange")));

IntelだとABIが互換でないため objc_msgSend_stret() はクラッシュするとのこと……。 以下のように変更する必要がありました。ややこしい。

CFRange (*markedRangeFunc)(void *id, void *SEL) =
  (CFRange(*)(void *id, void *SEL)) objc_msgSend;
CFRange markedRange =
  markedRangeFunc(inObj, NSSelectorFromString(CFSTR("markedRange")));

逆に今回はPowerPCで動作確認していないので、動作するのかわかりません。 どなたか試してみた方がいらっしゃいましたら、報告していただけると助かります。
(でも、アプリがクラッシュする可能性があるので、気をつけて!)

Posted in ,  | no comments | no trackbacks

MacUIM-0.5.2-8

Posted by yatsu Mon, 11 Feb 2008 14:42:37 GMT

ekatoさんのところでMacUIM-0.5.2-8が公開されました。

追記 2008.2.29

MOONGIFTで紹介されました。

MOONGIFT: » ことえりからの脱却「MacUIM」:オープンソースを毎日紹介

Posted in ,  | no comments | no trackbacks

Leopardでmate

Posted by yatsu Tue, 30 Oct 2007 12:26:21 GMT

LeopardでTextMateのmateコマンドを実行すると、

mate: failed to establish connection with TextMate.

というエラーが出て困っていたのですが、Nabble - mate command and screen in Leopard によると、Leopardのscreenと併用したときに起こる問題のようです。 MacPortsのscreenなら大丈夫と報告されていますが、FinkのscreenもOKでした。

Posted in , ,  | no comments | no trackbacks

Leopard

Posted by yatsu Tue, 30 Oct 2007 12:18:23 GMT

Leopardを購入。

MacUIMはそのまま動いたので、ほっとしました。

Unsanityのアプリがほとんど全滅なのが痛いです。

Posted in ,  | no comments | no trackbacks

Older posts: 1 2 3 ... 167