我正在实施一个托管Subversion存储库的服务。我需要每个存储库都有一个前端名称,即服务的使用者将使用的名称,以及后端路径,这是存储库实际存在于服务器文件系统中的位置。名称到路径的映射存储在数据库中。通过ssh访问存储库。
例如,网址为svn+ssh://server/my-repo
的repo实际上可能位于server
/srv/repos/some-random-string
的文件系统上。
当Subversion客户端访问svn+ssh://server/my-repo
时,它只是通过ssh在远程服务器上运行一个命令 - 这个命令是svnserve --tunnel
(或者沿着那些行)。服务器上的客户端和svnserve进程使用their own protocol进行通信,并且存储库的名称嵌入在协议中 - 在这种情况下,存储库的名称为my-repo
。 svnserve
然后在当前目录中查找my-repo
并提供服务。
问题是my-repo
是前端名称,它与后端路径不同,后者在这种情况下是{{1 }}。通过强制ssh运行/srv/repos/some-random-string
可以很容易地查看/srv/repos
而不是当前目录,但是将svnserve --root=/srv/repos --tunnel
映射到my-repo
似乎需要在客户端之间的通信中进行重写和服务器。
这是我的问题:是否可以使用libsvn来解析这些通信并进行适当的重写?关于从哪里开始的任何指示?