fc2ブログ

Entries

bzr rebaseはSubversionリポジトリのブランチでも使える

タグ: Bazaar Subversion
  • bzr 2.0.4
  • bzr-rebase 0.5.4
  • bzr-svn 1.0.0

で確認。
rebaseが使えると、Subversionで

$ svn checkout http://example.com/svn/tags/version1 # 安定版を落としてくる
……いろいろ編集する……
……いろいろ編集する……(ローカルの版管理どうしよう……(~_~;))
$ svn switch http://example.com/svn/tags/version2 # 安定版が新しくリリースされたのでチェックアウトをそちらにswitchする

とかやっていたところを

$ bzr branch http://example.com/svn/tags/version1 # 安定版からローカルブランチを作成
……いろいろ編集する……
$ bzr commit # 編集をローカルブランチにコミットする
……いろいろ編集する……
$ bzr commit # 編集をローカルブランチにコミットする
$ bzr rebase http://example.com/svn/tags/version2 # 安定版が新しくリリースされたのでローカルブランチをそちらにrebaseする

こうできるので非常にありがたい。

Redmineのアカウント情報でSubversionの認証を行う

タグ: Redmine

RedmineとSubversionのパスワードを一元管理する方法を探していたところ、こんなものが用意されていたことを今更ながら知った。

Repositories access control with apache, mod_dav_svn and mod_perl

Redmine.pmを特定の場所に置き、Apacheの設定を行うことで、Redmineの設定でSubversionの要求を認証・認可できるようになる。
公式の例はDebian/Ubuntu。CentOSなら「How To Install Redmine on Centos 5.2 Update」あたりが参考になる。

このモジュールの主な特徴は以下の通り。

  • URL中の「リポジトリ名」と思われる部分を「プロジェクト識別子」と判断してプロジェクトを識別する
  • Redmineのログイン名とパスワードで認証する
  • ユーザーがプロジェクトに対して「リポジトリの閲覧」権限を持っていればリポジトリの読み込みを許可する
  • ユーザーがプロジェクトに対して「コミットの閲覧」権限を持っていればリポジトリへの書き込みを許可する
  • 公開プロジェクトの読み込みは認証なしで許可する
  • AnonymousとNon memberの権限は無視される

注意しなければならない点は

  • リポジトリ名とプロジェクト識別子を一致させなければならない
    • プロジェクトを識別できないと認可が一切通らない
    • プロジェクト設定のリポジトリURLはなんの意味もなさない
  • 公開プロジェクトの読み込みには認証を掛けられない
    • Anonymousに「リポジトリの閲覧」権限がなかろうが関係ない

といったあたり。

HudsonとWindowsバッチコマンドの実行

タグ: Hudson

Hudson 1.351のビルド手順の1種「Windowsバッチコマンドの実行」はテキストをバッチファイルとして実行するが、そのバッチファイルの最後には「exit 0」という行が追加される。
そうとは知らずにこのようなテキストを書いてビルドすると、

CALL :COPY "foo\foo.dll"
CALL :COPY "bar\bar.dll"
CALL :COPY "baz\baz.exe"
GOTO :EOF

:COPY
COPY %1 artifacts
IF EXIST "%~dpn1.pdb" COPY "%~dpn1.pdb" artifacts

CALL :COPY してからEOFに辿り着くまでの間に exit 0 が実行されることになるため、 CALL から戻ることなくバッチ処理が終了してしまう。

ユーザーanonymousが実行
マスターでビルドします。
[workspace] $ cmd /c call C:\DOCUME~1\IDLYSP~1\LOCALS~1\Temp\hudson2823170059005737540.bat

C:\hudson\jobs\test\workspace>CALL :COPY "foo\foo.dll" 

C:\hudson\jobs\test\workspace>COPY "foo\foo.dll" artifacts 
        1 個のファイルをコピーしました。

C:\hudson\jobs\test\workspace>IF EXIST "C:\hudson\jobs\test\workspace\foo\foo.pdb" COPY "C:\hudson\jobs\test\workspace\foo\foo.pdb" artifacts 

C:\hudson\jobs\test\workspace>exit 0 
Finished: SUCCESS

よって末尾で不要に思えても GOTO :EOF を欠かしてはならない。

CALL :COPY "foo\foo.dll"
CALL :COPY "bar\bar.dll"
CALL :COPY "baz\baz.exe"
GOTO :EXIT

:COPY
COPY %1 artifacts
IF EXIST "%~dpn1.pdb" COPY "%~dpn1.pdb" artifacts
GOTO :EOF

:EXIT

また、「Windowsバッチコマンドの実行」が生成するバッチファイルは改行コードが「CRLF」ではなく「LF」になっている。
2バイト文字を使っていると実行時に一部の文字が消失してしまうことになるのでその点も注意が必要。

Hudsonプラグイン使用感その2

タグ: Hudson

Warnings Plugin 3.2
http://wiki.hudson-ci.org/display/HUDSON/Warnings+Plugin

Static Analysis Utilitiesを使ったStatic Code Analysis Plug-insの1つ。
プロジェクトの「設定」で「コンパイラの警告の集計」にチェックを入れておくと、ビルドごとにコンソールログ等を解析し、警告(エラー含む)の集計を行う。
コンソールログだけの状態より警告の概観がずっと楽になる。

以下、使っていて気付いたあれこれ。


Subversion Plugin 1.11
http://wiki.hudson-ci.org/display/HUDSON/Subversion+Plugin

Subversionのリポジトリからファイルをチェックアウトしたり、ビルドに使用したリビジョンに「タグを設定」するプラグイン。
「タグを設定」したビルドは「ビルド履歴」で一望できる。
便利な機能だが、

  • 「タグを設定」時に平常時と異なる認証情報を使うことができるが、この認証が成功した試しがない
  • 「タグを設定」のコメントに日本語を含めると文字化けする

といった問題がある。


Promoted Builds Simple Plugin 1.11
http://wiki.hudson-ci.org/display/HUDSON/Promoted+Builds+Simple+Plugin

Promoted Builds Pluginの簡易版。

  • 成功ビルドを手動で「昇進」させる
    simple_promote.png
  • 昇進にはレベルがあり、レベルごとに任意のアイコンを表示できる(ただしこの設定は全プロジェクト共用)
    qa_build.png
  • 昇進させたものを後から降格できる
  • マルチ構成プロジェクトではマスタービルドだけでなくサブビルドも昇進できる
  • 昇進させたビルドは自動的に「保存」される(サブビルド含め)
  • プラグインを有効にしていなかった時期のビルドは昇進の対象外
  • Promoted Builds Pluginとは違い、失敗ビルドは昇進させられない
  • Promoted Builds Pluginと併用可能

昇進とか考えず、単に「成功ビルドを保存しつつアイコンを付けるプラグイン」と考えると良い。

Hudson Warnings PluginとVCBuild /M2

タグ: Hudson VS2005

VCBuild.exeは/Mオプションを使うことでソリューション内の複数のプロジェクトを並行ビルドできる。

C:\temp>VCBuild.exe /M2 test.sln

並行ビルドでは複数のビルドプロセスの診断メッセージが入り交じることになるので、そのメッセージがどのプロセスに属するものかを識別するために、診断メッセージの先頭にはビルドプロセス番号が記される。

1>ビルド 開始: プロジェクト: Hoge、構成: Debug|Win32
2>ビルド 開始: プロジェクト: Fuga、構成: Debug|Win32
1>コンパイルしています...
2>コンパイルしています...
1>hoge.cpp
2>fuga.cpp
1>c:\temp\hoge\hoge.cpp(15) : warning C6386: バッファ オーバーランです:
1>c:\temp\hoge\hoge.cpp(24) : warning C6386: バッファ オーバーランです:
1>c:\temp\hoge\hoge.cpp(34) : warning C6386: バッファ オーバーランです:
1>c:\temp\hoge\hoge.cpp(35) : warning C6386: バッファ オーバーランです:
2>c:\temp\fuga\fuga.cpp(13) : warning C6386: バッファ オーバーランです:
2>c:\temp\fuga\fuga.cpp(36) : warning C6385: 無効なデータです:

しかるにHudson Warnings Plugin 3.2のMSBuildパーサはこのビルドプロセス番号を含む表記に正しく対応しておらず、コンパイラの警告ビューの詳細タブからソースコードを表示させようとしても

Caused by: java.io.FileNotFoundException: 1>c:\temp\hoge\hoge.cpp (No such file or directory)

とエラーになってしまう。
原因はMSBuildパーサがビルドプロセス番号までファイルパスの一部と認識しているからなので、MsBuildParser.javaの正規表現の先頭部分

private static final String MS_BUILD_WARNING_PATTERN = "(?:(?:

にビルドプロセス番号を無視する記述を加えて

private static final String MS_BUILD_WARNING_PATTERN = "(?:\\d+>)?(?:(?:

こうすれば表示できるようになる。

Appendix

タグ

Blog内検索