我正在使用Apache Jackrabbit Webdav库进行svn checkin操作。
我正在使用MAKActivity方法来启动交易。
但我不知道如何添加提交消息。以下是代码
RandomStringGenerator rsg = new RandomStringGenerator(32);
String random = rsg.nextString();
String url = getRepoAddress() + "!svn/act/" + random;
MkActivityMethod activityMethod = null;
try
{
activityMethod = new MkActivityMethod(url);
client.executeMethod(activityMethod);
}
catch(Exception e)
{
e.printStackTrace();
}
此代码执行成功但我不知道如何在此编写日志消息。 任何帮助都会很明显。
答案 0 :(得分:1)
首先,我建议您不要重新发明已经完成两次的轮子,而是使用知道Subversion基于DAV的协议的库。请注意,虽然Subversion主要是WebDAV和DeltaV兼容,但它确实有非标准扩展。
为此,我会指向JavaHL或SVNKit。 JavaHL附带Subversion并使用JNI访问Subversion库。 SVNKit是一个独立的Java实现,包含几个不同的接口,包括一个兼容JavaHL的接口。如果JavaHL使用本机库不会给你带来问题,我建议你这样做,因为你可以使用与几乎每个Subversion客户端相同的库。
但是,如果您的目标是了解Subversion如何在WebDAV和DeltaV之上实现协议,那么您可能只想使用通用WebDAV和DeltaV客户端库来提供帮助。我建议您参考这些documents that describe how WebDAV and DeltaV are implemented within Subversion。
您可能想要了解的一件事是as of Subversion 1.7 we support what we refer to as HTTPv2。 HTTPv2特别与DeltaV标准有所不同。我们使用MKACTIVITY
而不是使用POST
在服务器上启动事务。其主体的语法如下:
(create-txn)
或
( create-txn-with-props (PROPNAME PROPVAL [PROPNAME PROPVAL ...])
您必须与MKACTIVITY
一起使用的旧款式(如果您使用POST
代替create-txn
,则可以与create-txn-with-props
一起使用)是使用{{1在事务或工作基线URL上。
工作基线网址与PROPPATCH
一起使用,交易网址与POST一起使用。
使用MKACTIVITY
时,您必须在根网址上使用MKACTIVITY
才能获得PROPFIND
。然后对您收到的网址version-controlled-configuration
执行CHECKOUT
,以便PROPFIND
提供activity-set
href
作为您与MKACTIVITY
一起使用的网址。您将从CHECKOUT请求获取工作基线URL作为Location
标头。然后,您可以使用它来发出PROPPATCH
以应用修订属性。
使用POST
时,您可以从OPTIONS
请求响应中的标头获取事务存根,从SVN-Txn-Name
响应中的POST
标头获取事务名称,并针对PROPPATCH
网址执行$transaction_stub/$transaction_name
。
可能最好的解决方法是设置Subversion服务器并在通过调试代理服务器(如Charles)运行Subversion时进行一些提交。您可以使用这些选项--config-option servers:global:http-proxy-port=8888 --config-option servers:global:http-proxy-host=127.0.0.1
在svn命令行上强制通过代理的流量。如果您想查看旧协议,可以在http配置中包含SVNAdvertiseV2Protocol off
。
为了支持最广泛的Subversion服务器,您需要实现HTTPv1协议,该协议具有更多往返并且更难以实现。如果您只想实施HTTPv2,则仅限于支持1.7以上的Subversion服务器。为了使用具有最大兼容性的HTTPv2,您必须检测来自OPTIONS
响应的存在。
正如你所看到的那样变得相当复杂,所以如果你想做的就是实现一些基本的功能,那么编写自己的客户端真的不值得。
答案 1 :(得分:0)
所以你试图通过SVNAutoversioning on指令使用WebDAV进行SVN提交?
http://svnbook.red-bean.com/en/1.7/svn.webdav.autoversioning.html
AFAIK,规范不允许您提供提交消息,服务器将始终为您创建一个。如果您尝试通过Java创建SVN事务,也许您想要查看SVNKit库。