Skip to content

Instantly share code, notes, and snippets.

@zmmbreeze
Created November 22, 2013 04:38
Show Gist options
  • Save zmmbreeze/7594934 to your computer and use it in GitHub Desktop.
Save zmmbreeze/7594934 to your computer and use it in GitHub Desktop.
猜测当前目录使用了哪个版本控制系统的node函数
var Deferred = require('./Deferred'); // 支持Promise api的库都可以,例如q(http://documentup.com/kriskowal/q/)
var exec = require('child_process').exec;
/**
* 猜测当前目录使用了哪个版本控制系统
*
* @return {string} svn/git/hg/cvs, 如果检测不到返回空字符串
*/
function guessVcsName() {
var svnDef = new Deferred();
exec('svn info', function (err, stdout, stderr) {
if (err) {
if (err.code === 5) {
console.log('Your working copy is not compatible with your current Subversion,please run `svn upgrade`!\n');
}
svnDef.resolve('');
return;
}
svnDef.resolve('svn');
});
return svnDef
.then(function (cvsName) {
if (cvsName) {
return cvsName;
}
var gitDef = new Deferred();
exec(
'git rev-parse --is-inside-work-tree',
function (err, stdout, stderr) {
if (err) {
gitDef.resolve('');
return;
}
gitDef.resolve('git');
}
);
return gitDef;
})
.then(function (cvsName) {
if (cvsName) {
return cvsName;
}
var hgDef = new Deferred();
exec(
'hg root',
function (err, stdout) {
if (err) {
hgDef.resolve('');
return;
}
hgDef.resolve('hg');
}
);
return hgDef;
})
.then(function (cvsName) {
if (cvsName) {
return cvsName;
}
var cvsDef = new Deferred();
exec(
'cvs status',
function (err, stdout) {
if (err) {
cvsDef.resolve('');
return;
}
cvsDef.resolve('cvs');
}
);
return cvsDef;
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment