2014-02-17 57 views
0

我想解析顛覆日誌輸出獲取過濾信息並將它們存儲在數據庫表中。不幸的是,沒有用於Node.js的svn包裝器。我有修訂號列的修訂號列,文件列存儲所有數據和另一個消息寫入的ID。由於我在正則表達式中如此新穎,我嘗試從xml解析它 - 我們可以用xml格式( - xml)獲得svn輸出 - 到目前爲止,我試圖編寫正則表達式模式,但沒有任何運氣。以下是我有:如何使用RegexP解析Node.js中的SVN輸出?

var fs = require ('fs'); 

var fileName = "svnout.txt"; 

exports.svnparse = function(req, res) { 

    fs.readFile(fileName, {encoding: 'utf-8'}, function (err, data) { 

     if(err) { throw err; 
     } else { 
      console.log(data.toString()); 
      return res.send(parseSvn(data)); 
     } 
    }); 
}; 
var parseSvn = function(data) { 
     var logs = data.split('------------------------------------------------------------------------'); 

     var data = []; 
     logs = logs.slice(1, -1); 
     for (var log in logs) { 
     var pattern = '\r\nr(?P<rev>\d+)\s+\|\s+(?P<author>\w+)\s+\|\s+(?P<timestamp>.*?)\s||\s+(?P<messages>.*?)\s|'; 

var match = logs[log].match(pattern);; 
     data.push({rid: match[1], name: match[2], date: match[3], message: match[4]}); 
      saveToDB(data); 
     } 
     return {logs: data}; 
    }; 

回答

0

嘗試node-svn-spawn,該getLog結果例子:

[ 
    { 
     "$": { 
     "revision": "1" 
     }, 
     "author": "dong", 
     "date": "2013-11-08T02:10:37.656902Z", 
     "msg": "init repo" 
    }, 
    ... 
] 

還有許多其他的SVN命令的支持,比如加,狀態,提交,信息等

如果你想解析它自己,請嘗試node-xml2js

0

我想通過這種方式爲未來的參考:

var command = 'svn log '+ someSvnServerUrl + " -r {" + date + "}:{" + todate + "}" ; 
var command = 'svn log --xml '+ someSvnServerUrl + " -r {" + date + "}:{" + todate + "}"; 
return exec(command, function(err, stdout) { 
    if (err) { 
     console.log("Error on svn get", err); 
     return cb(err); 
    } else { 
     return cb(null, parseSvn(stdout)); 
    }