Javascript 如何在html中执行SVN http请求签入/提交
我有个问题 我想使用一个网站在我的svn服务器上进行签入和签出。 我已经把所有事情都做到了可以使用jQuery进行签出的程度。 我剩下的问题是合并过程的处理。 在合并中,svn传输分块响应。 但我的主机只是报告了错误的请求。 wireshark告诉m传输编码是分块的。 但我无法将其设置为chunked。如果我将contentType设置为chunked,则正文将被分块,而不是Transfer编码。 而且jquery.ajax()不提供传输编码。 试图把它放进标题也没有用…它甚至没有显示这个标题 我的签入代码:Javascript 如何在html中执行SVN http请求签入/提交,javascript,jquery,html,ajax,svn,Javascript,Jquery,Html,Ajax,Svn,我有个问题 我想使用一个网站在我的svn服务器上进行签入和签出。 我已经把所有事情都做到了可以使用jQuery进行签出的程度。 我剩下的问题是合并过程的处理。 在合并中,svn传输分块响应。 但我的主机只是报告了错误的请求。 wireshark告诉m传输编码是分块的。 但我无法将其设置为chunked。如果我将contentType设置为chunked,则正文将被分块,而不是Transfer编码。 而且jquery.ajax()不提供传输编码。 试图把它放进标题也没有用…它甚至没有显示这个标题
$.ajax({
type: "OPTIONS",
url: baseURL,
contentType: "text/xml",
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){
$.ajax({
type: "POST",
url: baseURL + "/!svn/me",
contentType: "application/vnd.svn-skel",
data: "(create-txn-with-props (svn:txn-user-agent 40 SVN/1.8.9(i686-pc-linux-gnu) serf/1.3.4 svn:log function svn:txn-client-compat-version 5 1.8.9))",
success: function(data2, status, jqxhr){
rev = jqxhr.getResponseHeader('SVN-Txn-Name');
newdata = new XMLSerializer().serializeToString(xmlString["context"]);
hashResult = calcMD5(newdata);
$.ajax({
type: "PUT",
url: baseURL + "/!svn/txr/" + rev + file + ".xml",
headers: {"X-SVN-Version-Name": latestRev, "X-SVN-Base-Fulltext-MD5":hashBase, "X-SVN-Result-Fulltext-MD5": hashResult},
contentType: "text/xml",
data: newdata,
success: function(data3, status, jqxhr){
chunked1 = '<?xml version="1.0" encoding="utf-8"?><D:merge xmlns:D="DAV:"><D:source><D:href>/svn/check/!svn/txn/' + rev + '</D:href></D:source><D:no-auto-merge></D:no-auto-merge><D:no-checkout></D:no-checkout><D:prop><D:checked-in></D:checked-in><D:version-name></D:version-name><D:resourcetype></D:resourcetype><D:creationdate></D:creationdate><D:creator-displayname>';
chunked2 = '</D:creator-displayname></D:prop></D:merge>';
length1 = chunked1.length;
length2 = chunked2.length;
$.ajax({
type: "MERGE",
url: baseURL,
headers: {"X-SVN-Options": "release-locks"},
contentType: "text/xml",
data: length1 + chunked1 + length2 + chunked2,
success: function(data4, status, jqxhr){
alert('file submitted');
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + ' at MERGE \n' + textStatus);
}
});
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + ' at PUT\n' + textStatus);
$.ajax({
type: "DELETE",
url: baseURL + "/!svn/txn/" + rev,
success: function(data3, status, jqxhr){
alert('file deleted');
}
});
}
});
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + ' at POST\n' + textStatus);
}
});
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + ' at OPTIONS\n' + textStatus);
}
});
$.ajax({
键入:“选项”,
url:baseURL,
contentType:“text/xml”,
数据:“”,
成功:函数(数据1、状态、jqxhr){
$.ajax({
类型:“POST”,
url:baseURL+“/!svn/me”,
contentType:“application/vnd.svn skel”,
数据:“(使用道具创建txn(svn:txn用户代理40 svn/1.8.9(i686 pc linux gnu)serf/1.3.4 svn:log函数svn:txn客户端兼容版本5 1.8.9)),
成功:函数(数据2、状态、jqxhr){
rev=jqxhr.getResponseHeader('SVN-Txn-Name');
newdata=new XMLSerializer().serializeToString(xmlString[“context”]);
hashResult=calcMD5(newdata);
$.ajax({
键入:“放置”,
url:baseURL+“/!svn/txr/”+rev+file+“.xml”,
标题:{“X-SVN-Version-Name”:latestRev,“X-SVN-Base-Fulltext-MD5”:hashBase,“X-SVN-Result-Fulltext-MD5”:hashResult},
contentType:“text/xml”,
数据:新数据,
成功:函数(数据3、状态、jqxhr){
chunked1='/svn/check/!svn/txn/'+rev+'';
chunked2='';
length1=chunked1.length;
length2=chunked2.length;
$.ajax({
键入:“合并”,
url:baseURL,
标题:{“X-SVN-Options”:“释放锁”},
contentType:“text/xml”,
数据:长度1+chunked1+length2+chunked2,
成功:函数(数据4、状态、jqxhr){
警报(“文件已提交”);
},
错误:函数(jqXHR、textStatus、errorshown){
警报(合并时的textStatus+\n'+textStatus);
}
});
},
错误:函数(jqXHR、textStatus、errorshown){
警报(文本状态+'在放置时\n'+文本状态);
$.ajax({
键入:“删除”,
url:baseURL+“/!svn/txn/”+rev,
成功:函数(数据3、状态、jqxhr){
警报(“文件已删除”);
}
});
}
});
},
错误:函数(jqXHR、textStatus、errorshown){
警报(POST时的textStatus+\n'+textStatus);
}
});
},
错误:函数(jqXHR、textStatus、errorshown){
警报(选项处的textStatus+\n'+textStatus);
}
});
编辑:更正了我代码中的一些错误
将problemfocus从PUT更改为MERGE,因为我发现了问题
问题是我在“X-SVN-Version-Name”中传输的不仅仅是数字,还有“数字”,因此错误“文件已过期”设置
内容类型:“text/xml”
和数据:chunked1+chunked2
然后一切正常,svn接受该文件