Subversion リポジトリをホストするサービスを実装しています。各リポジトリには、サービスのコンシューマーが使用するフロントエンド名と、サーバーのファイル システム上でリポジトリが実際に存在する場所であるバックエンド パスが必要です。名前からパスへのマッピングはデータベースに保存されます。リポジトリには ssh 経由でアクセスします。
たとえば、 の URL を持つリポジトリは、実際にはatsvn+ssh://server/my-repo
のファイル システムに存在する可能性があります。server
/srv/repos/some-random-string
Subversion クライアントが にアクセスするsvn+ssh://server/my-repo
と、ssh 経由でリモート サーバー上でコマンドを実行するだけsvnserve --tunnel
です。クライアントとサーバー上の svnserve プロセスは独自のプロトコルを使用して通信し、リポジトリの名前はプロトコルに埋め込まれています。この場合、リポジトリの名前はmy-repo
. svnserve
次にmy-repo
、現在のディレクトリを探して提供します。
問題はmy-repo
、フロントエンド名がバックエンド パス(この場合は )と異なることです/srv/repos/some-random-string
。現在のディレクトリの/srv/repos
代わりに調べるのは、強制的に ssh を実行することで簡単に実行できますsvnserve --root=/srv/repos --tunnel
が、へのマッピングmy-repo
にsome-random-string
は、クライアントとサーバー間の通信で書き換えが必要なようです。
これが私の質問です: libsvn を使用して、これらの通信を解析し、適切な書き換えを行うという汚い作業を行うことは可能ですか? どこから始めるべきかについての指針はありますか?