Javascript SVN包装器

Javascript SVN包装器,svn,javascript,svn-client,Svn,Javascript,Svn Client,是否有任何Javascript库能够读取和提交文件到Subversion服务器 服务器可能使用svn://协议或http://(dav_svn)协议。如果其中一个更方便,那也没关系,不过可以处理这两种类型的库更好 我希望避免创建存储库的本地工作副本(甚至可以用Javascript:p签出存储库) 有人看到解决方案了吗?我一直在四处寻找,但什么也没找到。我不知道一个真正现成的解决方案,但也许这个:可以帮上忙。这是一个用JS编写的WebDAV客户端,使用它也可以进行SVN校验 否则,您将不得不自己实

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

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

我希望避免创建存储库的本地工作副本(甚至可以用Javascript:p签出存储库)


有人看到解决方案了吗?我一直在四处寻找,但什么也没找到。

我不知道一个真正现成的解决方案,但也许这个:可以帮上忙。这是一个用JS编写的WebDAV客户端,使用它也可以进行SVN校验


否则,您将不得不自己实现WebDAV。您可以在这里找到规范:

您可以在一组命令文件中编写自己的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" );
但正如你所知,这并不安全

这个方法对我不起作用

我使用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);
                                    },
                                });
                            },
                        });
                    },
                });
            },
        });
    },
});
var URL=window.location.href;
var baseURL=URL.substring(0,URL.lastIndexOf('/');
$.ajax({
键入:“选项”,
url:baseURL,
contentType:“text/xml”,//有关其他文件,请查看下面的api链接
标题:{深度:“0”},
数据:“”,
成功:函数(数据1、状态、jqxhr){
latestRev=jqxhr.getResponseHeader('SVN-Rev');
$.ajax({
键入:“PROPFIND”,
url:baseURL+'/!svn/rvr/'+latestRev,
contentType:“text/xml”,
标题:{深度:“0”},
数据:“”,
成功:函数(数据2、状态、jqxhr){
$.ajax({
键入:“选项”,
url:baseURL,
contentType:“text/xml”,
标题:{深度:“0”},
数据:“”,
成功:函数(数据3、状态、jqxhr){
$.ajax({
键入:“报告”,
url:baseURL+“/!svn/me”,
contentType:“text/xml”,
数据:“是/svn/检查”+latestRev+“未知”,
成功:函数(数据4、状态、jqxhr){
svnSpecs=data4;
$.ajax({
键入:“获取”,
url:“/svn/check/!svn/rvr/”+latestRev+“/KickOff.xml”,
转换器:{“文本xml”:函数(obj){
hashBase=calcMD5(obj);
返回obj;
}},
cache:false,
async:false,
成功:函数(数据5、状态、jqxhr){
hashdata5=calcMD5(data5);
xmlString=$($.parseXML(data5));
绘图台(xmlString);
},
});
},
});
},
});
},
});
},
});
如果要导入xml以外的其他文件,请在此处查找:

data4/svnSpecs
中,您可以找到您在xml中使用的每一个关键字,只需执行与xmlString相同的操作即可

使用
a=xmlString.find(“成员”)您将获得一个数组,其中每个对象都命名为xml的成员
如果您执行
a[0].textContent=“Harry”
将xmlString中第一个对象的内容设置为Harry-->之后只需执行
drawTable()
即可刷新表

编辑:
drawTable()
方法中,您必须执行
a.find(“”
var list=[]
list.push(“表格的html文本”)
$(“#membertable”).html(列表)写入现有表“membertable”中的所有内容

hashBase
对于提交非常重要。 我还没完成任务,但已经快完成了。
当前的代码和流程就在这里:

我有同样的问题,我刚刚找到了似乎就是这个问题的答案;我自己没有尝试过,但它声称支持add、rm、propset、propdel、mkdir和commit。禁止移动、复制、锁定或解锁


它看起来也像是四年前最后一次被触动,因为它的价值。

你想使用哪种类型的JavaScript?浏览器中的JavaScript命令,例如node.js?浏览器中的JavaScript。我想为SVN存储库做一些快速查看/编辑(并且不依赖PHP/Java服务器来完成这项工作)。实际上我也有同样的问题,但我想用这种方式进行区分-提供一种方式来显示给定修订的更改,而不必通过基于服务器的命令。Matthieu-你终于让它工作了吗?LittleJawa No不幸的是,我记得尝试过,但我觉得它需要大量的开发和坚持。除了不安全之外,它还有两个缺点:1)你很难让它在所有操作系统上运行(你必须为每个受支持的操作系统调整命令行,这很痛苦),2)它要求所有用户安装一个命令行SVN客户端,并在路径中可用,但情况并非总是如此-我猜,您不会总是从开发机器上查看此网页。请注意,此代码与SVN版本1.7兼容+