SVN

2012年1月22日 (日)

メールで受け取ったファイルをSVNに登録する

まぁあんまり困る人はいないでしょうが、社外から社内へのアクセス方法がほぼメールだけとかに制限されている会社ってありますよね。メールで受信したファイルをSVNに自動で登録する仕組みを作ってみました。いつものように超プロトタイプレベルですので、自分で何とかできる人だけ参考にしてみて下さい。

大体受け取るメールというのはこういった形のものを想定しています。

TO:特別に用意したアドレスがおすすめ

SUB:svn-commit)120120進捗報告資料を送信します。

BODY: ProjectName:SampleProject

Path:/120120

Comment:refs #1 進捗報告資料を送信します。

メールのタイトルの先頭に"svn-commit"が入っていて、メールの本文にリポジトリの情報を引き出すためのプロジェクト名「ProjectName:」が指定していて,リポジトリ内の保存先のフォルダを「Path:」で指定し、,「Comment:」でコミット時のメッセージを書かいてあり、一つ以上の添付ファイルがついているメールに対しての未処理を行います。プロジェクト名とかメールアドレスはInitTracUsersで、プロジェクト名はInitTracReposで設定されているものである必要があり、リポジトリはチェックアウト済でなければなりません。 また、保存先に指定するパスは最低限1階層は指定してください。(svn addで面倒なことになるので、そうしてます)

ファイルとしては次の三つです
1. SVNUpdate.bas

「SVNUpdate.bas」をダウンロード

2. SVNClient.cls

「SVNClient.cls」をダウンロード

3. CommandLauncher.cls

「CommandLauncher.cls」をダウンロード

さすがにOutlookなので、ソースをそのまま貼り付けてもうれしい人もいないと思うのでファイルにしてますので、それをダウンロードしてインポートしてください。

その他の修正箇所ですが、まずは、
ThisOutlookSessionのApplication_NewMailExを次のようにしてください。

'メールを受信したとき
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim col As Variant
    InitTracUsers
    InitTracRepos

    '複数受信したときはカンマ区切りでメールのIDが入ってくる
    If InStr(1, EntryIDCollection, ",") = 0 Then
        Set col = New Collection
        col.Add EntryIDCollection
    Else
        col = Split(EntryIDCollection, ",")
    End If
    For Each msgId In col
        受信したメールの処理 msgId
    Next
End Sub

次はSVNUpdateのInitTracUsersとInitTracReposを適切に書き換えてください。

Public Sub InitTracUsers()
    Dim c As Collection
    Set m_TracUsers = New Collection
    Set c = New Collection
    c.Add "admin", "name"
    c.Add "admin", "password"
    m_TracUsers.Add c, "admin@example.com"
    Set c = New Collection
    c.Add "admin2", "name"
    c.Add "admin2", "password"
    m_TracUsers.Add c, "admin2@example.com"
End Sub

Public Sub InitTracRepos()
    Dim c As Collection
    Set m_TracRepos = New Collection
    Set c = New Collection
    c.Add "D:\SVN\SampleProject", "WorkingCopy"
    c.Add "http://localhost/svn/SampleProject", "URL"
    m_TracRepos.Add c, "SampleProject"
End Sub

あとは、SVNUpdateのsvn_commitの中にSVNのファイル名が書いてありますのでそこを書き換えておいてください

    Dim colUser As Collection
    Set colUser = m_TracUsers.Item(oMsg.SenderEmailAddress)
    m_svn.init "c:\TracLight\CollabNetSVN\svn.exe", colUser.Item("name"), colUser.Item("password")
    m_svn.Update svnRoot

次は上で書いたようにリポジトリをチェックアウトしておいてください。そうすると指定したアドレスから受信したメールの添付ファイルを適切な位置に保存してSVNにコミットしてれます。ZIPファイルの場合はファイルを展開して一階層のフォルダを捨てたうえで展開してコミットします。

いろいろエラー処理とか追加したほうがよいとも思うんですが、私自身が必要としている範囲を大きく超える必要もないかということで、こんなかんじかなぁ。本業がメールにおぼれてえらいことになったので作っただけなので、本業のほうがかたづけばそれでいいということで、必要な人がいなければ、ここまででいいのかなってことでお許しを…

| | コメント (0) | トラックバック (0)

2009年8月23日 (日)

今までTrac関係で作ったものの関係をまとめる。

勉強会の発表資料は分かりにくかったのと,Trac関係に一区切りをつけたいなということで,最近は仕事でTrac使うことがないので,テストとかほとんどできてなくて,すべて中途半端ですが、私がやってきたこと(ProjectのVBAは後で登録します)をまとめておきます.

今まで,Tracの問題としてあげられてきた内容をまとめると.

  • プロジェクトの親子関係がない
  • チケットの粒度が違うものをどうするか
  • 項目(カスタムフィールド)が大きく違うものを同じプロジェクトで扱うこと
  • 複数のプロジェクトに分割したときの登録,確認,出力方法
  • コミットメッセージが一つのプロジェクトにしかつけられないため分割できない

これらを解決するために,私が作ってきたものがどこにからんでくるかということを,次の図にしました.この図ならなんとかわかってもらえるのではないかと

Multitracdep_3

1. InterTracCommitPatch

コミットメッセージを,同じサーバ上の隣のプロジェクトにつけることを可能にします.これにより,今までは,要件定義,工程,実作業,障害などは,同じリポジトリを使う必要があため,どれだけ扱う項目(カスタムフィールド)が違っていたとしても,同じプロジェクトで扱うしか方法がありませんでした.これがあれば,リポジトリの縛りから解放され,プロジェクトを自由に分割することができます.

2. TracDepenecencyPlugin

同じサーバのTracプロジェクト間でチケットの親子関係と,依存関係を扱えるように拡張し,Tracのプロジェクトを分割することが容易になります.カスタムフィールドの入力のところのチェックがまだ追加できてないので,先行チケットを複数指定するときはカンマで区切り,スペースを追加しないとだめなはず.

3. レポート,クエリのHTA

複数のプロジェクトの状況を確認するには,いろいろやらなければならないことが多かったため,これを使用することで,一つのクエリ,レポートの状況を一目で確認できるようにします.いまはTraM(まだ確認してません)があるので必要ないのでしょうか.このHTAは,環境によるのだと思いますが,接続できない未解決の問題があるようです.

4. チケット登録/編集用Excel VBA

XML-RPC経由でチケットの登録と編集を行います.単純に複数のシートに書き込めるようにしただけですが,あれば結構便利です.

5. MS-Project - Trac 連携VBA InterTrac対応版(未公開)

このVBAは,2.のプラグインの情報を元に,ガントチャートが作成でき,先行タスクのところにカッコつきで指定した,四つの依存関係(SS,FS,SF,FF))に対応もしています.作ったものの,仕事で使う機会がなく,デバッグできてないので,公開してません.どの範囲の親子や依存関係を取ってくるかは情報の取得時に設定するため,開発者個人のプロジェクトやレビュープロジェクトを含め内容にすることができます.(MasterTicketsのように,双方向のリンクをDBに保存してないのはそういう理由だったんですが,今となってはあってもよかったのかなぁと思ってます.)

最近出てきたTraMとか含めると,いろいろなところで出ていたTracの問題や,RedMineより劣る点って,解決すると思うんですがどうでしょうか.

| | コメント (0) | トラックバック (0)

Shinjyuku.trac勉強会第4回発表資料

Shinjyuku.trac勉強会第4回の発表資料を登録しておきます。

プロジェクト間のチケットの親子関係(u-z)

3_2

4

5

6

7

8

9

10

11

12    

| | コメント (0) | トラックバック (0)

2009年6月15日 (月)

リポジトリを共有しない場合で隣のプロジェクトへコミット時のメッセージをつける

以前の記事では,Tracのプロジェクトを共有する場合に,隣のプロジェクトにコミットメッセージをつける方法を書きましたが,チェンジセットへのリンクを少し変更すれば,リポジトリを共有しない場合でも使えることに気づきましたので,その方法について書いてみます.

この内容はShibuya.trac勉強会第4回の発表のなかで少し触れる予定です.

前回のものは次のようになっていましたが

(In [1]) refs tr2:#1

今回は次のように変更します

(In [tr2:changeset:1 1]) refs tr2:#1

1. プロジェクトを作成します
Tracのコマンドプロンプトを開き次のコマンドでプロジェクトを二つ作ります.

C:\TracLight\bin>create-project tr1
C:\TracLight\bin>create-project tr2

2. InterTracの設定を追加します
次の二つのファイルの最後のところに
C:\TracLight\projects\trac\tr1\conf\trac.ini
C:\TracLight\projects\trac\tr2\conf\trac.ini
次のものを追加します.

[intertrac]
tr1.title = Trac Test Project 1
tr1.url = http://192.168.1.8/trac/tr1
tr2.title = Trac Test Project 2
tr2.url = http://192.168.1.8/trac/tr2

3. trac-post-commit-hookを修正します.
設定しないほかのプロジェクトには影響しないようにC:\TracLight\python-lib\trac\contrib\のtrac-post-commit-hookをコピーし,trac-post-commit-hook2を作成します.前回からの変更の概略は次のようにコミットメッセージをInterTrac形式のメッセージに変更します.

tracproj = project[str.rfind(project,'/')+1:]
中略

self.msg = "(In [%s:changeset:%s %s]) %s" % (tracproj, rev, rev, chgset.message)

前回の修正も含んだ「trac-post-commit-hook2」をダウンロード

4. プロジェクトごとに使うかどうかを設定できるようにします
C:\TracLight\projects\svn\tr1\hooks\post-commit.bat
を,post-commit2.shを呼ぶために次のようにします.

SET TRAC_LIGHT_HOME=C:\TracLight

if not DEFINED TL_PROJECT_HOME set TL_PROJECT_HOME=%TRAC_LIGHT_HOME%\projects

::-----------------------------
::Call the TRAC post-commit hook
::
SET REPOS="%1"
SET REV=%2
echo %1 >> c:\trac-svn.log

FOR /F "usebackq delims==" %%i IN (`%TRAC_LIGHT_HOME%\python\python.exe -c "import sys,re;r=re.split('\\\\',sys.argv[1]);print r[len(r)-1]" %REPOS%`) DO SET PROJECT=%%i

%TRAC_LIGHT_HOME%\bin\bash.exe %TRAC_LIGHT_HOME%/bin/post-commit2.sh "%1" %2 "%TL_PROJECT_HOME%" "%PROJECT%"

上の変更から呼ばれるようになったファイルのC:\TracLight\bin\post-commit2.sh
をpost-commit.shを元にして,trac-post-commit-hook から trac-post-commit-hook2に変更します

REPOS="$1"
REV=$2
TL_PROJECT_HOME="$3"
PROJECT="$4"


LOG=`svnlook log -r $REV "$REPOS"`
AUTHOR=`svnlook author -r $REV "$REPOS"`
TRAC_ENV="$TL_PROJECT_HOME/trac/$PROJECT"

$TRAC_LIGHT_HOME/python/python.exe $TRAC_LIGHT_HOME/python-lib/trac/contrib/trac-post-commit-hook2 \
   -p "$TRAC_ENV"  \
   -r "$REV"       \
   -u "$AUTHOR"    \
   -m "$LOG"

5. 確認

リポジトリに何か登録しコミットします

svn co http://192.168.1.8/svn/tr1
cd tr1
mkdir trunk
svn add trunk
echo aaaaa > aaaa.txt
svn add aaaa.txt
svn ci -m "refs tr2:#1"

tr2:#1をブラウザで開きます.

Trticket01

チェンジセットのリンク部分をクリックして,チェンジセットを確認します.

Trticket02

リポジトリを共有しない場合でもチェンジセットへのリンクを張ることができました.

インストール先とか環境に依存するものは適切に設定してください.

| | コメント (0) | トラックバック (0)

2009年5月30日 (土)

SVNリポジトリを複数のTracから共有し,post-commitでのコメントをそれぞれに振り分ける

チケットタイプによってカスタムフィールドが大きく違っていたりして,TicketExtプラグインを使用してもおなじTracで扱うのに無理があるような場合に,複数のTracプロジェクトに分けたいと思うときがあります.しかし,別のTracプロジェクトから同じリポジトリを使うことはできますが,コミットのコメントをどのTracに割り振るかを決めることができなくいので,リポジトリを使うのは一つのTracプロジェクトにまとめる必要がありました.(私が知らないだけかもしれませんが…)それで,InterTracリンクからヒントを得て,trac-post-commit-hookでTracプロジェクトに割り振る仕組みを作ってみました.

とにかくちゃんとやるのは面倒なので,とりあえず次のようなコメントが登録されるところまでを作ってみることとします.

svn commit -m "refs test2:#4 refs test3:#2"

1. create-projectでtest1,test2,test3を作り,適当に必要な番号までチケットを追加してください

2. 各プロジェクトのconf/trac.iniを編集し,InterTracを有効にします(ショートカットも設定しているが,できれば使ってほしくない)

[intertrac]
t1 = test1
t2 = test2
t3 = test3
test1.title = Trac Test Project 1
test1.url = http://192.168.1.8/trac/test1
test2.title = Trac Test Project 2
test2.url = http://192.168.1.8/trac/test2
test3.title = Trac Test Project 3
test3.url = http://192.168.1.8/trac/test3

3. 副プロジェクト(このばあいはtest2,test3)のconf/trac.iniのたぶん最後のあたりを編集し,リポジトリを主になるプロジェクト(test1)のものに変更する

[trac]
authz_module_name = test1
repository_dir = C:\TracLight\projects/svn/test1

4. リポジトリに再同期する

trac-admin.bat resync c:\TracLight\projects\trac\test2

5. 「trac-post-commit-hook」をダウンロード し,python-lib\trac\contribにおく

元のファイルはバックアップしてください.

6. リポジトリをチェックアウトし,何かを適当にコミットします.

cd 適切なフォルダ
svn co http://localhost/svn/test1
フォルダを作ったり,移動したりする.
svn commit -m "refs test2:#4 refs test3:#2"

7. 確認します

まずはチェンジセット

Test1cs3

ログメッセージからtest2:#4をクリックし表示されることを確認

Test24

同様にコメントからtest3:#2をクリックし表示されることを確認

Test32

コメントがついてちゃんとリンクできることが確認できました. 今回は私が必要としている形のコメントに対応するところまでしかやっていません.あと,InterTracの設定を使っていないので,同じサーバの兄弟プロジェクトのみでしか動きません.

Python全然わからないので修正する力はありませんが,間違っていたら指摘してください.

http://zakizaki.cocolog-nifty.com/software/2009/06/post-d614.html で リポジトリを共有しない場合の修正方法を追加しました(2009/06/15)

| | コメント (0) | トラックバック (0)

2009年1月25日 (日)

Trac+SVNインストール後すぐに行う設定

TracLightningインストール直後にSVN関連で行う設定ってまとまったところがないなぁということでまとめてみます。

1. チケットなしのコミットは許さない

TracLight/projects/svn/~~~~/hooks/pre-commit.batを次のようにします

SET TRAC_LISHT_HOME=D:\TracLight

if not DEFINED TL_PROJECT_HOME set TL_PROJECT_HOME=%TRAC_LIGHT_HOME%\projects

SET REPOS="%1"

SET REV=%2

SVNLOOK log -t %2 %1 > pre-commit.txt

FINDSTR "refs #**" pre-commit.txt

IF NOT %ERRORLEVEL%==0 EXIT 1

2. コミットメッセージのチケットへのリンク付け

これはLighiningでは標準なので何もしない。

3. Mylynのテンプレートの設定

Mylynを使う場合は概要とかをコメントに追加できるので、こっちを設定しておいた方がよい。

Window->PreferenceでMylyn->TeamのCommit comment templateに次のように設定する

refs ${connector.task.prefix}${task.key}:

[${task.url} ${task.description}]

こうすると次のリンクが設定される。

  • コミットログからチケットへ
  • チケットからチェンジセットへ
  • チェンジセットからチケットへ

4. リポジトリの属性の設定

TortoiseSVN等を使う場合にこれを設定しておくとBTSとの連携なしでそこそこ適切なコメントが追加できる。

編集中

Svnatt

5. TortoiseSVNからファイルを追加するときに、変換するキーワードをファイルの種類別に設定

私はこの設定は必要ないと思うのだが、ファイル中のキーワードを変更したい場合はこの設定をしておく。

configファイルより抜粋

enable-auto-props = yes

### Section for configuring automatic properties.

[auto-props]

*.c = svn:keywords=Id Date Author Rev URL

*.h = svn:keywords=Id Date Author Rev URL

*.hpp = svn:keywords=Id Date Author Rev URL

*.cpp = svn:keywords=Id Date Author Rev URL

*.hxx = svn:keywords=Id Date Author Rev URL

*.cxx = svn:keywords=Id Date Author Rev URL

*.C = svn:keywords=Id Date Author Rev URL

*.asm = svn:keywords=Id Date Author Rev URL

*.s = svn:keywords=Id Date Author Rev URL

*.S = svn:keywords=Id Date Author Rev URL

設定参考ページ

http://bokunomichi.blogspot.com/2007/03/subversiontortoisesvn.html

| | コメント (0) | トラックバック (0)