我正在实现一个托管 Subversion 存储库的服务。我需要每个存储库都有一个前端名称,即服务的消费者将使用的名称,以及一个后端路径,即存储库实际位于服务器文件系统上的位置。名称到路径的映射存储在数据库中。通过 ssh 访问存储库。
例如,具有 URL 的 reposvn+ssh://server/my-repo
可能实际上存在于 at 的文件系统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
. 通过强制 ssh 运行来查找/srv/repos
而不是当前目录很容易svnserve --root=/srv/repos --tunnel
,但映射my-repo
到some-random-string
似乎需要在客户端和服务器之间的通信中进行重写。
这是我的问题:是否可以使用 libsvn 来完成解析这些通信并进行适当重写的繁琐工作?关于从哪里开始的任何指示?