JavaScript SVN封装器

23

有没有能够将文件读取并提交到 Subversion 服务器的 Javascript 库?

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

我想避免创建本地工作副本(在Javascript中是否可能检出存储库...)。

有人有解决方案吗?我已经寻找了一些东西,但没有找到任何东西。


你想使用哪种类型的JavaScript?浏览器中的JavaScript还是例如node.js? - TimWolla
在浏览器中使用Javascript。我想要为SVN仓库进行某种快速查看/编辑(而不依赖于PHP / Java服务器来完成工作)。 - Matthieu Napoli
我其实有同样的问题,但我想以这种方式进行DIFF - 提供一种在不通过基于服务器的命令的情况下显示给定修订版本更改的方法。Matthieu - 你最终解决了吗?你也能做DIFF吗? - Little Jawa
@LittleJawa 很遗憾,我记得曾经尝试过,但我感觉它需要很多的开发和毅力。 - Matthieu Napoli
4个回答

10

4

这个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文件中使用的每个关键字 - 只需像处理xml字符串一样处理即可

通过 a = xmlString.find("Member"); 您可以获得名为“member”的xml每个对象的数组。 如果您执行 a[0].textContent = "Harry";,则将您的xmlString中的第一个对象的内容设置为Harry - > 然后只需在刷新表格之后执行drawTable()即可

编辑:drawTable() 方法中,您需要执行 a.find(""), var list = [];list.push("html文本用于创建表格"),然后执行 $("#membertable").html(list); 将所有内容写入现有表格“membertable”

对于提交代码来说,hashBase 是很重要的。 我还没有提交,但快要完成了。 当前代码和流程在这里:how to do SVN http-request checkin/commit within html


请注意,此代码与 SVN 版本 1.7+ 兼容。 - Inferpse

1

我有同样的问题,刚刚发现了svnjs,它似乎正是这个功能;我自己还没有尝试过,但它声称支持添加、删除、属性设置、属性删除、创建目录和提交。不支持移动、复制、锁定或解锁。

据说它最后一次更新是四年前。


1
嗨,David,你成功让 svnjs 工作了吗?我已经尝试了存储库中提供的两个版本,但都无法让我添加或修改文件...先谢谢你! - Eric Roy
1
不,我从未这样做过,抱歉。据我所知,GitHub的跨站点脚本保护措施意味着您无法从另一个网站向其发出XMLHTTP请求。 - David Given

0

您可以编写一组命令文件来编写自己的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" );

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


除了不安全之外,它还有两个缺点:1)您将很难在所有操作系统上运行它(您必须为每个受支持的操作系统适应命令行,这很繁琐),并且2)它要求所有用户安装并在PATH中可用命令行SVN客户端,这并不总是情况-我猜您并不总是从开发机器上查看此网页。 - Little Jawa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接