Javascript SVN wrapper



是否有任何Javascript库使读取提交文件到Subversion服务器?

服务器可以使用svn://协议或http:// (dav_svn)协议。如果一个库更方便,那也可以,但是一个能处理这两种类型的库更好。

我想避免必须创建存储库的本地工作副本(甚至可能在Javascript中签出存储库:p…)。

有人看到解决方案了吗?

我不知道一个真正现成的解决方案,但也许这个:https://github.com/sara-nl/js-webdav-client可以帮助。这是一个用JS编写的webdav客户端,有了它,应该也可以签出SVN。

否则你将不得不自己实现WebDAV。您可以在这里找到规范:http://webdav.org/specs/

https://github.com/sara-nl/js-webdav-client不适合我

我使用jQuery读取XML文件:

var URL = window.location.href;
var baseURL = URL.substring(0, URL.lastIndexOf('/'));
$.ajax({
    type: "OPTIONS",
    url: baseURL,
    contentType: "text/xml", //for other files look up the api link below
    headers: {Depth: "0"},
    data: '<?xml version="1.0" encoding="utf-8" ?><D:options xmlns:D="DAV:"><D:activity-collection-set></D:activity-collection-set></D:options>',
    success: function(data1, status, jqxhr){
        latestRev = jqxhr.getResponseHeader('SVN-Youngest-Rev');
        $.ajax({
            type: "PROPFIND",
            url: baseURL + '/!svn/rvr/' + latestRev,
            contentType: "text/xml",
            headers: {Depth: "0"},
            data: '<?xml version="1.0" encoding="utf-8" ?><propfind xmlns="DAV:"><prop><resourcetype xmlns="DAV:"/></prop></propfind>',
            success: function(data2, status, jqxhr){
                $.ajax({
                    type: "OPTIONS",
                    url: baseURL,
                    contentType: "text/xml",
                    headers: {Depth: "0"},
                    data: '<?xml version="1.0" encoding="utf-8" ?><D:options xmlns:D="DAV:"><D:activity-collection-set></D:activity-collection-set></D:options>',
                    success: function(data3, status, jqxhr){
                        $.ajax({
                            type: "REPORT",
                            url: baseURL + "/!svn/me",
                            contentType: "text/xml",
                            data: '<S:update-report xmlns:S="svn:"><S:include-props>yes</S:include-props><S:src-path>/svn/check</S:src-path><S:target-revision>' + latestRev + '</S:target-revision><S:depth>unknown</S:depth><S:entry depth="infinity" rev="' + latestRev + '"></S:entry></S:update-report>',
                            success: function(data4,status,jqxhr){
                                svnSpecs = data4;
                                $.ajax({
                                    type: "GET",
                                    url: '/svn/check/!svn/rvr/' + latestRev + '/KickOff.xml',
                                    converters: {"text xml": function(obj) {
                                        hashBase = calcMD5(obj);
                                        return obj;
                                    }},
                                    cache: false,
                                    async: false,
                                    success: function(data5, status, jqxhr){
                                        hashdata5 = calcMD5(data5);
                                        xmlString = $($.parseXML(data5));
                                        drawTable(xmlString);
                                    },
                                });
                            },
                        });
                    },
                });
            },
        });
    },
});

如果您想导入xml以外的其他文件,请查看此处:http://api.jquery.com/jQuery.ajax/

data4/svnSpecs中,您可以找到您在xml中使用的每个关键字-只需与xmlString

相同

使用a = xmlString.find("Member");,您将获得包含xml中命名为成员的每个对象的数组如果您执行a[0].textContent = "Harry";,则将xmlString中第一个对象的内容设置为Harry ->,然后可以执行drawTable()以刷新表

编辑:

drawTable()方法中,您必须执行a.find(""), var list = [];list.push("html text for a table")以及$("#membertable").html(list);来写入现有表"membertable"中的所有内容

hashBase对于提交很重要。我还没有完成提交,但快完成了。当前代码和流程在这里:如何在html

中执行SVN http-request签入/提交

我也有同样的问题,我刚刚发现svnjs似乎正是这样;我自己没有试过,但它声称支持add, rm, propset, propdel, mkdir和commit。禁止移动、复制、锁定或解锁。

它看起来像四年前最后一次被碰过,不管它值多少钱

您可以在一组命令文件中编写自己的Svn命令,然后在脚本中运行它们。

/* Create WSH Shell */
oShell = WScript.CreateObject( "WScript.Shell" );
/* Launch svn.exe with other orguments */
oShell.Run( "svn.exe svn://192.168.40.41  Param1 param2" );
/* Let the user know that we are done           */
WScript.Echo( "Done" );

但你知道,这是不安全的。

最新更新