Skip to content

Instantly share code, notes, and snippets.

@happyguohua
Created June 5, 2015 03:19
Show Gist options
  • Select an option

  • Save happyguohua/41ac69fc3fbd55128410 to your computer and use it in GitHub Desktop.

Select an option

Save happyguohua/41ac69fc3fbd55128410 to your computer and use it in GitHub Desktop.
create git branch
var spawn = require('child_process').spawn,
fs = require('fs'),
commandArray = [
'git help',
'git init',
'git remote add origin ssh://git@stash.englishtown.com:7999/comm/evc-ui-library.git',
'git fetch',
'git branch -r'
];
var releaseVersion = '2015.25-1';
var baseBranchName;
fs.stat('tmp', function(error, stats) {
if (error || !stats.isDirectory()) {
function setupWorkspace() {
commandArray.reduce(function(inited, task) {
return inited.then(function() {
var spawnParameter = task.split(' ');
return setupEvent(spawn(spawnParameter[0], spawnParameter.slice(1), {cwd: './tmp'}));
});
}, Promise.resolve())
.then(function(baseBranch) {
if (baseBranch) {
baseBranchName = baseBranch.baseName;
return setupEvent(spawn('git', ['checkout',
'origin/' + baseBranch.baseName + baseBranch.baseVersion], {cwd: './tmp'}));
} else {
return setupEvent(spawn('git', ['checkout',
'origin/team/ateam/develop'], {cwd: './tmp'}));
}
})
.then(function() {
return setupEvent(spawn('git', ['checkout', '-b', baseBranchName + releaseVersion], {cwd: './tmp'}));
});
}
fs.mkdir('tmp', function(error) {
if (error) return;
setupWorkspace();
})
} else {
setupWorkspace();
}
})
function setupEvent(processID) {
return new Promise(function(resolve) {
var result = '';
var baseBranch;
processID.stdout.on('data', function(chunk) {
result += chunk;
});
processID.stdout.on('end', function() {
var resultArray = result.toString().split(/\s+/g);
baseBranch = getBaseBranch(resultArray);
});
processID.stderr.on('data', function(chunk) {
console.error(chunk.toString());
});
processID.stdout.on('close', function() {
console.log('close');
resolve(baseBranch.baseName ? baseBranch : '');
});
});
}
function getBaseBranch(branchs) {
var regBranch = /^(origin\/)((?:team\/ateam\/|)release\/)([\d.-]+)$/i,
lastReleaseBranchName,
lastReleaseVersion;
branchs.forEach(function(branch) {
var match = regBranch.exec(branch.trim());
if (match) {
lastReleaseBranchName = match[2];
lastReleaseVersion = match[3];
}
});
return {
baseName: lastReleaseBranchName,
baseVersion: lastReleaseVersion
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment