如何将提交消息写入svn存储库

时间:2014-01-14 09:04:40

标签: apache svn webdav jackrabbit

我正在使用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();
}

此代码执行成功但我不知道如何在此编写日志消息。 任何帮助都会很明显。

2 个答案:

答案 0 :(得分:1)

首先,我建议您不要重新发明已经完成两次的轮子,而是使用知道Subversion基于DAV的协议的库。请注意,虽然Subversion主要是WebDAV和DeltaV兼容,但它确实有非标准扩展。

为此,我会指向JavaHLSVNKit。 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库。

http://svnkit.com

相关问题