Server IP : 85.214.239.14 / Your IP : 18.117.151.0 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/3/task/3/root/proc/2/root/lib/node_modules/pm2/node_modules/vizion/lib/svn/ |
Upload File : |
var fs = require('fs'); var waterfall = require('async/waterfall'); var exec = require('child_process').exec; var cliCommand = require('../cliCommand.js'); var svn = {}; svn.parse = function(folder, cb) { var getMeta = function(cb) { exec(cliCommand(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 && typeof(data.url) === 'object') { data.url = data.url[1]; } var match = stdout.match(/Relative URL: \^\/([^\n]+)/); if (match) { var relativeUrl = match[1]; if (relativeUrl.match(/^trunk/)) { data.branch = 'trunk'; } else if (relativeUrl.match(/^branch/)) { match = relativeUrl.match(/^branch(?:es)?\/([^/]+)(?:\/|$)/); if (match) { data.branch = match[1]; } } } match = stdout.match(/Last Changed Rev: ([^\n]+)/); if (match) { data.revision = match[1]; } match = stdout.match(/Last Changed Date: ([^\n]+)/); if (match) { var date = new Date(match[1]); data.update_time = date; } return cb(null, data); }); } var getRevComment = function(data, cb) { var rev = data.revision || "BASE"; exec(cliCommand(folder, "svn log -r " + rev), function(err, stdout, stderr) { if(err !== null) return cb(err); if (rev === "BASE") { data.revision = stdout.match(/^(r[0-9]+)\s\|/m); if (data.revision) data.revision = data.revision[1]; } data.comment = stdout.match(/lines?\s*\n((.|\n)*)\n-{72}\n$/); if (data.comment) data.comment = data.comment[1].replace(/\n/g, ''); if (!data.update_time) { data.update_time = stdout.match(/-+\n(.*?)\n/); if (data.update_time) data.update_time = new Date( data.update_time[1].split(" | ")[2] ); } cb(null, data); }); } var getDate = function(data, cb) { if (data.update_time) return cb(null, data); fs.stat(folder+".svn", function(err, stats) { if(err !== null) return cb(err); data.update_time = stats.mtime; return cb(null, data); }); } waterfall([getMeta, getRevComment, getDate], function(err, data) { if (err !== null) return cb(err); return cb(null, data); }); } 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; } exec(cliCommand(folder, "svn info"), function(err, stdout, stderr) { if(err !== null) return cb(err); var current_rev = getRev(stdout); exec(cliCommand(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); }); }); } svn.update = function(folder, cb) { var res = {}; exec(cliCommand(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); }); } module.exports = svn;