vizion
Advanced tools
Comparing version 0.1.0 to 0.1.1
151
lib/svn.js
@@ -0,78 +1,97 @@ | ||
var fs = require("fs"); | ||
var async = require('async'); | ||
var exec = require("child_process").exec; | ||
var fs = require("fs"); | ||
var svn = {}; | ||
var halt = false; | ||
svn.parse = function(folder, cb) { | ||
var getMeta = function(cb) { | ||
exec("cd '"+folder+"';svn info", function(err, stdout, stderr) { | ||
if(err !== null) | ||
return cb(err); | ||
var data = {}; | ||
data.type = 'svn'; | ||
data.url = stdout.match(/Repository Root:([^\n]+)/); | ||
if (data.url) data.url = data.url[1]; | ||
data.branch = data.url.match(/[^/]+$/); | ||
if (data.branch) data.branch = data.branch[0]; | ||
return cb(null, data); | ||
}); | ||
} | ||
function error(repoType, task, errorMsg, cb) { | ||
if (halt) return false; | ||
var getRevComment = function(data, cb) { | ||
exec("cd '"+folder+"';svn log -r BASE", function(err, stdout, stderr) { | ||
if(err !== null) | ||
return cb(err); | ||
data.revision = stdout.match(/^(r[0-9]+)\s\|/m); | ||
data.comment = stdout.match(/lines?\s*\n((.|\n)*)\n-{72}\n$/); | ||
if (data.revision) data.revision = data.revision[1]; | ||
if (data.comment) data.comment = data.comment[1].replace(/\n/g, ''); | ||
cb(null, data); | ||
}); | ||
} | ||
console.error("[Repo-Parser] An error occured while " + task + " in a " + repoType + " repository: " + errorMsg); | ||
halt = true; | ||
return cb("[Repo-Parser] An error occured while " + task + " in a " + repoType + " repository: " + errorMsg); | ||
var getDate = function(data, cb) { | ||
fs.stat(folder+".svn", function(err, stats) { | ||
if(err !== null) | ||
return cb(err); | ||
data.update_time = stats.mtime; | ||
return cb(null, data); | ||
}); | ||
} | ||
async.waterfall([getMeta, getRevComment, getDate], | ||
function(err, data) { | ||
if (err !== null) | ||
return cb(err); | ||
return cb(null, data); | ||
}); | ||
} | ||
function checkReturn(dataArray, cb) { | ||
if (halt) { | ||
return false; | ||
} | ||
if (Object.keys(dataArray).length > 6) { | ||
Object.keys(dataArray).forEach(function(key) { | ||
if (typeof(dataArray[key]) === 'string') { | ||
dataArray[key] = dataArray[key].replace(/\n/g, ''); | ||
} | ||
}); | ||
cb(null, dataArray); | ||
} | ||
}; | ||
svn.isUpdated = function(folder, cb) { | ||
var res = {}; | ||
var getRev = function(str) { | ||
var matches = str.match(/Changed Rev: ([^\n]+)/); | ||
if (matches) matches = matches[1]; | ||
return matches; | ||
} | ||
module.exports.parse = function parseSvn(folder, cb) { | ||
var data = {}; | ||
exec("cd '"+folder+"';svn info", function(err, stdout, stderr) { | ||
if(err !== null) | ||
return cb(err); | ||
var current_rev = getRev(stdout); | ||
exec("cd '"+folder+"';svn info -r HEAD", function(err, stdout, stderr) { | ||
if(err !== null) | ||
return cb(err); | ||
var recent_rev = getRev(stdout); | ||
res.is_up_to_date = (recent_rev === current_rev); | ||
res.new_revision = recent_rev; | ||
res.current_revision = current_rev; | ||
return cb(null, res); | ||
}); | ||
}); | ||
} | ||
data.type = 'svn'; | ||
data.commit_history = []; // temporary | ||
svn.update = function(folder, cb) { | ||
var res = {}; | ||
exec("cd '"+folder+"'; svn info | grep 'Repository Root' | awk '{print $NF}'", function(err, stdout, stderr) { | ||
if(err !== null) { | ||
error("subversion", "fetching path", stderr, cb); | ||
} | ||
else { | ||
data.url = stdout; | ||
checkReturn(data, cb); | ||
} | ||
}); | ||
exec("cd '"+folder+"';svn update", function(err, stdout, stderr) { | ||
if(err !== null) | ||
return cb(err); | ||
var new_rev = stdout.match(/Updated to revision ([^\.]+)/); | ||
if (new_rev === null) | ||
{ | ||
res.success = false; | ||
var old_rev = stdout.match(/At revision ([^\.]+)/); | ||
res.current_revision = (old_rev) ? old_rev[1] : null; | ||
} | ||
else { | ||
res.success = true; | ||
res.current_revision = new_rev[1]; | ||
} | ||
return cb(null, res); | ||
}); | ||
} | ||
exec("cd '"+folder+"'; svn log -r COMMITTED", function(err, stdout, stderr) { | ||
if(err !== null) { | ||
error("subversion", "fetching log", stderr, cb); | ||
} | ||
else { | ||
var message = stdout.match(/^(r[0-9]+)\s\|/m); | ||
//date = stdout.match(/^date:\s+:([^\n]+)$/m); | ||
var summary = stdout.match(/lines?\s*\n((.|\n)*)\n-{72}\n$/); | ||
data.revision = message[1]; | ||
data.comment = summary[1]; | ||
//data.update_time = date; | ||
checkReturn(data, cb); | ||
} | ||
}); | ||
exec("cd '"+folder+"'; svn info | sed -n \"/URL:/s/.*\\///p\"", function(err, stdout, stderr) { | ||
if(err !== null) { | ||
error("subversion", "fetching branch", stderr, cb); | ||
} | ||
else { | ||
data.branch = stdout; | ||
checkReturn(data, cb); | ||
} | ||
}); | ||
fs.stat(folder+".svn", function(err, stats) { | ||
if(err !== null) { | ||
error("subversion", "fetching stats", "no error available", cb); | ||
} | ||
else { | ||
data.update_time = stats.mtime; | ||
checkReturn(data, cb); | ||
} | ||
}); | ||
} | ||
module.exports = svn; |
@@ -34,4 +34,4 @@ var hg = require('./hg.js'); | ||
// return hg.isUpdated(folder, cb); | ||
// else if (type === 'svn') | ||
// return svn.isUpdated(folder, cb); | ||
else if (type === 'svn') | ||
return svn.isUpdated(folder, cb); | ||
else | ||
@@ -53,4 +53,4 @@ return cb({ | ||
// return hg.update(folder, cb); | ||
// else if (type === 'svn') | ||
// return svn.update(folder, cb); | ||
else if (type === 'svn') | ||
return svn.update(folder, cb); | ||
else | ||
@@ -57,0 +57,0 @@ return cb({ |
{ | ||
"name": "vizion", | ||
"version": "0.1.0", | ||
"version": "0.1.1", | ||
"engines": { | ||
@@ -5,0 +5,0 @@ "node": ">=0.10" |
@@ -27,4 +27,4 @@ | ||
* commment : 'This is a comment', | ||
* update_time : 'DATE', | ||
* url : 'http://an.url', | ||
* update_time : Tue Oct 28 2014 14:33:30 GMT+0100 (CET), | ||
* url : 'https://github.com/keymetrics/vizion.git', | ||
* revision : 'f0a1d45936cf7a3c969e4caba96546fd23255796', | ||
@@ -31,0 +31,0 @@ * next_rev : null, // null if its latest in the branch |
Sorry, the diff of this file is not supported yet
Copyleft License
License(Experimental) Copyleft license information was found
Found 1 instance in 1 package
SPDX disjunction
LicenseSPDX disjunction for an artifact's license information
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
Non-permissive License
License(Experimental) A license not known to be considered permissive was found
Found 1 instance in 1 package
Copyleft License
License(Experimental) Copyleft license information was found
Found 1 instance in 1 package
SPDX disjunction
LicenseSPDX disjunction for an artifact's license information
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
Non-permissive License
License(Experimental) A license not known to be considered permissive was found
Found 1 instance in 1 package
60861
687
21