SubversionとWebDAV

サーバー運用がかなり厳しいので寄付をしてくれる人がいたらこちら
メインPCもボロボロになってきたので、ついにほしいものリスト公開

最近はCVSよりもSubversionが人気らしいので使ってみます。

HP: http://subversion.tigris.org/

まずはさくっとSubversionをインストールします。
とその前にBerkeleyDBのインストールが完了してることが前提です。
neonてのも実は必要でした。
http://www.webdav.org/neon/

neonのインストール

cd /usr/local/src
wget http://www.webdav.org/neon/neon-0.29.3.tar.gz
tar zxvf neon-0.29.3.tar.gz
cd neon-0.29.3
./configure --enable-shared --with-libxml2 --with-expat --with-ssl=openssl
make
make install

Subversionのインストール

cd /usr/local/src
wget http://subversion.tigris.org/downloads/subversion-1.6.16.tar.bz2
tar jxfv subversion-1.6.16.tar.bz2
cd subversion-1.6.16
./configure \
--with-apxs=/usr/local/apache2/bin/apxs \
--with-ssl=/usr/local/ssl \
--with-zlib=/usr \
--with-swig=/usr \
--with-berkeley-db \
--with-neon=/usr/local \
PYTHON=/usr/bin/python
make
make install
make swig-py
make install-swig-py
echo /usr/local/lib/svn-python > \
/usr/lib/python2.x/site-packages/subversion.pth
make swig-rb
make install-swig-rb

次にapacheと連携します。

/usr/local/apache2/conf/httpd.conf

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
↑はたぶんインストール時に勝手に書いてくれます。
<VirtualHost *:80>
	Serveradmin webmaster@svn.example.com
	DocumentRoot /usr/local/apache2/htdocs
	ServerName svn.momo-i.org
	CustomLog /usr/local/apache2/logs/access_log_svn combined
	ScriptAlias /viewvc /usr/local/viewvc/bin/cgi/viewvc.cgi
	ScriptAlias /query /usr/local/viewvc/bin/cgi/query.cgi
	AddDefaultCharset UTF-8
	<Location /hoge1>
		DAV svn
		SVNPath /usr/local/svn/repos1
	</Location>
	#閲覧以外制限をかけたい場合
	<Location /hoge2>
		DAV svn
		SVNPath /usr/local/svn/repos2
		AuthUserFile /usr/local/apache/conf/.htpasswd
		AuthName "Basic attestation screen"
		AuthType Basic
		<LimitExcept GET OPTIONS REPORT>
			Require valid-user
		</LimitExcept>
	</Location>
</VirtualHost>

これでインストールは完了です。
次にレポジトリを作っておきます。

mkdir /usr/local/svn
svnadmin create /usr/local/svn/repos1
chown -R apache. /usr/local/svn

http://svn.example.org/test/にアクセスをして
きちんと表示できるかを確認します。

Revision 0: / ------------------- Powered by Subversion version xxxxxxxxxx

上記のようにアクセスが確認できたら次にソース管理の基本(?)を作成です。

svn mkdir http://svn.example.org/test/trunk -m "trunk"
svn mkdir http://svn.example.org/test/tags -m "tags"
svn mkdir http://svn.example.org/test/branches -m "branches"

これで再度アクセスをすると

Revision 3: / branches/ tags/ trunk/ ------------------- Powered by Subversion version xxxxxxxx

のように表示されてるはずです。
後はTortoiseSVNとかを使ってWindowsからウボァーとアクセスをするといいです。

コミットメール

コミットしたときにメールでお知らせしてくれるようにしてみます。
リポジトリのルートフォルダを$REPOSとして表記しますので、適宜置き換えてください。

$REPOS/hooks/post-commit

#!/bin/sh
 
export LANG=japanese
REPOS="$1"
REV="$2"
${REPOS}/hooks/commit-email.rb "$REPOS" "$REV"

$REPOS/hooks/commit-email.rb

#!/usr/bin/ruby -Ke
require 'net/smtp'
require 'kconv'
 
REPOS=ARGV[0]
REV=ARGV[1].to_i
 
svnauthor=%x{svnlook author #{REPOS} -r #{REV} }.chomp
svndate=%x{svnlook date #{REPOS} -r #{REV} }.chomp
svnchanged=%x{svnlook changed #{REPOS} -r #{REV} }.chomp
svnlog=%x{svnlook log #{REPOS} -r #{REV} }.chomp
svndiff=%x{svnlook diff #{REPOS} -r #{REV} }.chomp
 
toaddr  =['to@example.com']
fromaddr=['from@example.com']
 
 
svnlog=svnlog.kconv(Kconv::UTF8,  Kconv::ASCII)
 
body = <<END_OF_BODY
Subversion committed to #{REPOS} #{REV}
┌────────────────────────────┐
│更新者  : #{svnauthor.ljust(46)}│
│更新日時: #{svndate.ljust(46)}│
└────────────────────────────┘
 
Log:
--------------------------------------------------------
#{svnlog}
 
Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
#{svnchanged}
 
Diff:
--------------------------------------------------------
#{svndiff}
 
END_OF_BODY
 
 
 
message = <<END_OF_MESSAGE
From: Subversion Admin <#{fromaddr}>
To: Subversion committers:;
Subject: [dgweb svn-#{REV}] commit
MIME-Version: 1.0
Content-Type: text/plain; charset = ISO-2022-JP
X-Mailer: Subversion email-send.rb
 
#{body.tojis}
END_OF_MESSAGE
 
Net::SMTP.start('localhost', 25) { |smtp|
    smtp.send_mail(message, fromaddr, *toaddr)
}

これでコミット時にたぶんメールが飛んできます。
rname・toaddr・fromaddrは適宜修正してください。

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
CAPTCHA
また変更しました
Fill in the blank.