Debian package で subversion (svn) を使う場合のメモ

基本的な使い方は書いてなくて、あまり使わないけどメモっておくか、程度のものを書いています。

既存の Debian パッケージを svn に取り込む

    $ mkdir -p /srv/svn/debian ; cd /srv/svn/debian
    $ svnadmin create examples
    $ svn-inject /tmp/examples_0-1.dsc  file:///srv/svn/debian/examples

この場合、以下のようなディレクトリ構成でインポートされる。

    .
    └── examples
        ├── branches
        │   └── upstream
        │       ├── 0
        │       └── current
        ├── tags
        └── trunk

アップストリームのソースコードをコミットしない

svn-inject に -o オプションを付けると、ソースコードはコミットせずに debian ディレクトリだけを管理できるようになる。

    .
    └── examples
        ├── tags
        └── trunk
            └── debian
                ├── changelog
                ├── compat
                ├── control
                ......

インポートするディレクトリを指定したい

あるディレクトリの下で管理したい場合には先にディレクトリをつくってコミットしておく。

    $ mkdir -p /srv/svn/debian ; cd /srv/svn/debian
    $ svnadmin create examples
    $ svn co file:///srv/svn/debian/example test
    $ mkdir test ; svn add test ;  svn ci -m "Add test directory"
    $ svn-inject /tmp/examples_0-1.dsc  file:///srv/svn/debian/examples/test

ディレクトリ構成は以下にようになる。

    .
    └── test
        └── examples
            ├── tags
            └── trunk
                └── debian
                    ├── changelog
                    ├── compat
                    ├── control
                    ......

リポジトリのダンプ

リポジトリを移動する必要があったり、一部のディレクトリのみを移動させたりなど。 Debian ではチームメンテナンスになって、リポジトリが移動したりすることがある。その時に調べたメモ。

svnadmin の dump コマンドに ダンプしたいリポジトリのパス(URLではない)を指定すると標準出力に ダンプしてくれる。リダイレクトしてファイルに保存する。

    $ svnadmin dump /srv/svn/debian/example > dump

例えば、test/examples ディレクトリのみをダンプしたい場合には、 svndumpfilter でフィルタリングしてファイルに保存する。

    $ svnadmin dump /srv/svn/debian/example | svndumpfilter include test/examples/ > dump

ダンプしたデータのインポート

ダンプしたデータをリポジトリにインポートするには svnadmin load コマンドを使う。 この場合、注意すべき点としてリポジトリに ディレクトリがコミットされている必要がある。ディレクトリがない場合には正常にコミットされないようです。 (上でダンプしたデータをインポートする場合は、test ディレクトリがコミットされている必要がある。)

    $ pwd
    /srv/svn
    $ svnadmin create new-rep
    $ svn co file:///srv/svn/new-rep rep1
    $ cd rep1
    $ mkdir test
    $ svn add test
    $ svn ci -m "Add test directory"
    $ cd ..
    $ svnadmin load /srv/svn/new-rep < dump

指定したディレクトリにインポートする

ダンプしたデータを指定したディレクトリにインポートするには --parent-dir オプションを使う。 例えば、packages ディレクトリにインポートしたい場合には以下のように実行する。

    $ cd rep1
    $ mkdir packages/test
    $ svn add packages
    $ svn ci -m "Add packages directory"
    $ cd ..
    $ svnadmin load /tmp/svn/new-rep --parent-dir packages < dump

opencv をpkg-scicomp から debian-science の svn リポジトリに移動させる。

ようするにこれがしたかったのです。wagner にログインして以下を実行する。

    $ svnadmin dump /srv/svn.debian.org/svn/pkg-scicomp/ | svndumpfilter include opencv > opencv.dump
    $ svnadmin load /srv/svn.debian.org/svn/debian-science/ --parent-dir packages < ~/opencv.dump