ページ更新: 2004-06-27 (日) (5228日前)

関連: ソフト/Subversion, eclipse/plugin/ソースコード管理システム

(2004-06-26 新規作成)

Cygwin にも subversion パッケージ が出たので、突付いてみる(使ってみる、ではなく)。

今回使うのはこれだ。

とはいえ、Windows 用にすでにSubversionがあるし(Apache2もあるし)、 もとから Windows に対応しているわけだから、(レポジトリの指定で file:///c:/svn/repo のようにドライブ名を受け付けるわけだし)、 別に Cygwin のを使わなくてもよいのだけど。 (Cygwinのiconv周りの実装は不足しているようだし)

目次

[編集]

インストール #

[編集]

インストール #

インストール自体は setup.exe で選ぶだけなので、省略。

subversion と依存パッケージが正常にインストールされたかどうか、確認する。 (依存パッケージは setup.ini の requires より)

$ cygcheck -c subversion cygwin libaprutil0 libapr0 libdb4.2 libneon24 expat
Cygwin Package Information
Package              Version                Status
cygwin               1.5.10-3               OK
expat                1.95.7-1               OK
libapr0              0.9.5pre20040608-1     OK
libaprutil0          0.9.5pre20040608-1     OK
libdb4.2             4.2.52-1               OK
libneon24            0.24.6-1               OK
subversion           1.0.5-1                OK
[編集]

依存のパッケージの調査 #

libapr と libneon が何か判らなかったのと、libdb4.2 の情報を知りたかったので、 setup.ini から検索してみる。

(cygcheck では調べられないのかなあ……。そういうスクリプトを書いた方がよいかも)

$ egrep -A 5 '^@ (libaprutil0|libapr0|libdb4.2|libneon24)' setup.ini

(以下、結果を編集)
@ libapr0
sdesc: "The Apache Portable Runtime (runtime package)"

@ libaprutil0
sdesc: "Additional utility library for use with the Apache Portable Runtime
(runtime package)"

@ libdb4.2
sdesc: "The Sleepycat Berkeley DB Library v4.1 - runtime"

@ libdb4.2-devel
sdesc: "The Sleepycat Berkeley DB Library v4.2"
ldesc: "High performance database library supporting B+trees, Hash
trees, transactional capabilities and more. More details are available
at sleepycat.com" ★サイトがあるようだ

@ libneon24
sdesc: "Runtime library component of Neon - an HTTP and WebDAV client library"
ldesc: "Neon is an HTTP and WebDAV client library, with a C interface."
★libneonはWebDAVクライアントだったのか

@ subversion
sdesc: "A version control system"
ldesc: "Subversion is a version control system that aims to be a compelling
replacement for CVS in the open source community"
[編集]

libdb4.2 #

sleepycat.comを見てみる。http://sleepycat.com/ を見ると、 「Sleepycat Software: Berkeley DB Database, Native XML Database, Native Java Database」だそうだ。

[編集]

libneon, neon #

libneonの方は、たぶん neon ってパッケージもあるはず、と思って調べてみる。

$ cygcheck -cd | grep ^neon
neon                    0.24.6-1

$ cygcheck -cd neon
Cygwin Package Information
Package              Version
neon                 0.24.6-1

$ cygcheck -l neon
/usr/bin/neon-config  ★これが設定用スクリプト?
/usr/include/neon/ne_207.h
:(略)
/usr/include/neon/ne_xml.h
/usr/lib/libneon.dll.a
/usr/lib/libneon.la
/usr/lib/pkgconfig/neon.pc
/usr/share/doc/Cygwin/neon-0.24.6.README  ★CygwinパッケージのREADME
/usr/share/doc/neon-0.24.6/AUTHORS
:(略)
/usr/share/doc/neon-0.24.6/NEWS
/usr/share/doc/neon-0.24.6/README    ★neon自体のREADME
/usr/share/doc/neon-0.24.6/THANKS
/usr/share/man/man1/neon-config.1.gz  ★neon-configのmanもある。
/usr/share/man/man3/neon.3.gz
:(略)
/usr/share/man/man3/ne_version_string.3.gz
★実行ファイルがあるわけではない。

neon-config スクリプトを眺めてから、help を表示させてみる。

$ /usr/bin/neon-config --help
Usage: neon-config [OPTION]

Known values for OPTION are:

  --prefix=DIR          change neon prefix [default /usr]
  --libs                print library linking information
  --la-file             print location of libtool .la file
  --cflags              print pre-processor and compiler flags
  --help                display this help and exit
  --version             output version information
  --support FEATURE     exit with success if feature is supported
 Known features: dav [yes], ssl [yes], zlib [yes]
[編集]

subversionパッケージ #

subversion パッケージのファイル一覧を眺める。

$ cygcheck -l subversion
/usr/bin/cygsvn_client-1-0.dll
/usr/bin/cygsvn_delta-1-0.dll
/usr/bin/cygsvn_diff-1-0.dll
/usr/bin/cygsvn_fs-1-0.dll
/usr/bin/cygsvn_ra-1-0.dll
/usr/bin/cygsvn_ra_dav-1-0.dll
/usr/bin/cygsvn_ra_local-1-0.dll
/usr/bin/cygsvn_ra_svn-1-0.dll
/usr/bin/cygsvn_repos-1-0.dll
/usr/bin/cygsvn_subr-1-0.dll
/usr/bin/cygsvn_wc-1-0.dll
/usr/bin/svn.exe
/usr/bin/svnadmin.exe
/usr/bin/svndumpfilter.exe
/usr/bin/svnlook.exe
/usr/bin/svnserve.exe
/usr/bin/svnversion.exe
/usr/share/doc/Cygwin/subversion-1.0.5.README  ★Cygwin用のREADME
/usr/share/doc/subversion-1.0.5/ChangeLog.CVS
/usr/share/doc/subversion-1.0.5/CHANGES
/usr/share/doc/subversion-1.0.5/COPYING
/usr/share/doc/subversion-1.0.5/INSTALL        ★
/usr/share/doc/subversion-1.0.5/README         ★
/usr/share/man/man1/svn.1.gz
/usr/share/man/man1/svnadmin.1.gz
/usr/share/man/man1/svndumpfilter.1.gz
/usr/share/man/man1/svnlook.1.gz
/usr/share/man/man1/svnversion.1.gz
/usr/share/man/man5/svnserve.conf.5.gz         ★設定ファイルのマニュアル?
/usr/share/man/man8/svnserve.8.gz
[編集]

README など #

README などを眺める。

  • /usr/share/doc/subversion-1.0.5/README
    • IV. QUICKSTART GUIDE で使い方を簡単に書いてある。
      • レポジトリへの接続方法は、WebDAV 経由、ローカル、カスタムプロトコル、の3種類。
      • ローカルは Berkeley DB に直接アクセスするので、バージョンの違いに敏感だと思う。
      • カスタムプロトコルは デーモン起動、inetd経由、xinetd経由で使うはず。
  • /usr/share/doc/subversion-1.0.5/CHANGES
    おなじみの変更履歴。結構多い。
  • /usr/share/doc/subversion-1.0.5/COPYING
    おなじみの。
  • /usr/share/doc/subversion-1.0.5/INSTALL
    47KBもある。
    • I. BUILD REQUIREMENTS - 1. Apache Portable Runtime 0.9.5 (http://apr.apache.org/)
      Apache 2.0.X のライブラリを使っている? Cygwin の Apache 1.3.X で動かないかも。 というか、Apache 1.3.X で WebDAV って使えたっけ?
      • ということは、Subversion は残りの3つの手段(ローカル/inetd/デーモン)で 使うことになる。たぶん。
  • I. BUILD REQUIREMENTS - 5. Berkeley DB 4.X.
    • libdb を使うわけだから、レポジトリを他の環境に持って行くときは、種別やバージョンが変わったときには気をつけた方が良い。また専用のツールがあるかも知れない。 (PostgreSQLで言うところの pg_dump、とか)
  • III. BUILDING A SUBVERSION SERVER - C. Configuring Apache for Subversion
    • Apache2 経由の設定。
  • III. BUILDING A SUBVERSION SERVER - E. Alternative: 'svnserve' and ra_svn
    • デーモンの動かし方。
  • /usr/share/doc/Cygwin/subversion-1.0.5.README オリジナルの情報、コンパイル手順など。
[編集]

セットアップ #

QUICKSTART GUIDE に「You can see which methods are available to your 'svn' client by running 'svn --version'. 」と書いてあるので、確かめる。

$ svn --version
svn, version 1.0.5 (r9954)
   compiled Jun 20 2004, 23:28:30

Copyright (C) 2000-2004 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository access (RA) modules are available:

* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
  - handles 'http' schema
  - handles 'https' schema
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' schema
* ra_svn : Module for accessing a repository using the svn network protocol.
  - handles 'svn' schema
[編集]

ローカル #

レポジトリは /var/svn とする。

[編集]

1. svnadmin create /path/to/repos #

ディレクトリを作って、

$ mkdir -p /var/svn/repos

レポジトリを作成する。

$ svnadmin create /var/svn/repos

わざと、もう一度実行してみる。こういうエラーが出るのか。

$ svnadmin create /var/svn/repos
svn: Repository creation failed
svn: Could not create top-level directory
svn: '/var/svn/repos' exists and is non-empty

作成されたファイルを見てみる。BDBのファイルがいくつかある。

$ ls -R /var/svn/repos
/var/svn/repos:
README.txt  conf/  dav/  db/  format  hooks/  locks/

/var/svn/repos/conf:
svnserve.conf

/var/svn/repos/dav:

/var/svn/repos/db:
DB_CONFIG  __db.003  changes         nodes            strings
__db.001   __db.004  copies          representations  transactions
__db.002   __db.005  log.0000000001  revisions        uuids

/var/svn/repos/hooks:
post-commit.tmpl          pre-commit.tmpl          start-commit.tmpl
post-revprop-change.tmpl  pre-revprop-change.tmpl

/var/svn/repos/locks:
db-logs.lock  db.lock
[編集]

2. svn import /tmp/project file:///path/to/repos -m "Initial import" #

ダミーのファイルをでっち上げる。

branches, tags, trunk ってレポジトリの方に作るべきではないのか、 とか、自動では作ってくれないのだな、とか思う。 (svn help、svn help mkdir を実行すると、mkdir コマンドってのもあるし)

とりあえずは 文書に従ってみる。

最初に、インポートするファイルとディレクトリを用意して:

$ mkdir /tmp/project
$ cd /tmp/project/
$ mkdir branches tags trunk
$ cd trunk
$ cp /usr/share/doc/Cygwin/subversion-1.0.5.README foo.c
$ cp foo.c bar.c
$ cp foo.c baz.c

$ ls -R /tmp/project
/tmp/project:
branches  tags  trunk

/tmp/project/branches:

/tmp/project/tags:

/tmp/project/trunk:
bar.c  baz.c  foo.c

で、インポートしてみる。

$ svn import /tmp/project file:///var/svn/repos -m "Initial import"
Adding         /tmp/project/trunk
Adding         /tmp/project/trunk/foo.c
Adding         /tmp/project/trunk/bar.c
Adding         /tmp/project/trunk/baz.c
Adding         /tmp/project/branches
Adding         /tmp/project/tags

Committed revision 1.
[編集]

3. svn checkout file:///path/to/repos/trunk project #

trunkをprojectってディレクトリにチェックアウトする。

$ svn checkout file:///var/svn/repos/trunk project
A  project/foo.c
A  project/bar.c
A  project/baz.c
Checked out revision 1.

$ ls
bar.c  baz.c  foo.c  project/

$ ls project/
.svn/  bar.c  baz.c  foo.c

しつこく、もう一度チェックアウトしてみる。

$ svn checkout file:///var/svn/repos/trunk project
Checked out revision 1.

ワーキングコピー のディレクトリに移って、diffなどを試してみる。

$ pwd
/tmp/project/trunk
 
$ cd project/
$ pwd
/tmp/project/trunk/project

$ svn diff foo.c

foo.cを編集。末尾に 'append' って行を追加して、

$ svn diff foo.c
Index: foo.c
===================================================================
--- foo.c       (revision 1)
+++ foo.c       (working copy)
@@ -61,3 +61,5 @@

 Cygwin port maintained by: Max Bowsher <maxb@ukf.net>

+
+append

わざと、ワーキングコピーの外でコミットしてみる。当然エラーになる。

$ pwd
/tmp/project/trunk

$ svn commit
svn: '/tmp/project/trunk' is not a working copy

ワーキングコピーに移動して、コミットしてみる。ログメッセージを指定できないって。

$ cd project/
$ pwd
/tmp/project/trunk/project

$ svn commit
svn: Commit failed (details follow):
svn: Could not use external editor to fetch log message; consider setting the $S
VN_EDITOR environment variable or using the --message (-m) or --file (-F) option
s
svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR is set, and
no 'editor-cmd' run-time configuration option was found

よって、エディタを指定して再度コミットしてみる。

$ EDITOR=vim svn commit
--This line, and those below, will be ignored--

M    foo.c
~
~
~
"svn-commit.tmp" 4L, 61C
Sending        foo.c
Transmitting file data .
Committed revision 2.

あるいは

Log message unchanged or not specified
a)bort, c)ontinue, e)dit
$ svn up
At revision 2.
[編集]

inetd 経由のサーバ #

(未検証)

[/etc/services]

svn              3690/tcp                           #Subversion on inetd

[/etc/inetd.conf]

cvn     stream  tcp     nowait  root    /usr/sbin/tcpd /usr/bin/svnserve -r /var/svn

[/etc/hosts.allow]

svn: 127.0.0.1 
[編集]

デーモン #

cygrunsrv でサービス化。svnserveをデーモンとして (-d) 起動させる。

(未検証)

#!/bin/sh
# File: subversion-cygwin-config.sh
# Purpose: Installs svnserve daemon as a Windows service
cygrunsrv \
--install svnserve \
--disp 'CYGWIN Subversion' \
--path /usr/bin/svnserve \
--args "-d -r /var/svn" \
--dep cygserver \             ★要検討。
--termsig INT \               ★要検討。
--user subversion \           ★要検討。
--shutdown \
--type manual