added createNewBranch gitutil. added getReleaseBranchFromVersion versionutil. platform release uses new getReleaseBranchFromVersion method. determine whether plugin repos have release branch in them or not, and prompt user to manually merge/cherry-pick in the case that release branch already exists, otherwise, create the release branch.
Project: http://git-wip-us.apache.org/repos/asf/cordova-coho/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-coho/commit/ba4dd933 Tree: http://git-wip-us.apache.org/repos/asf/cordova-coho/tree/ba4dd933 Diff: http://git-wip-us.apache.org/repos/asf/cordova-coho/diff/ba4dd933 Branch: refs/heads/master Commit: ba4dd93390fde9b8343285b266ffb68a2f5d94e7 Parents: 9a7a5cc Author: filmaj <[email protected]> Authored: Wed Feb 1 16:20:50 2017 -0800 Committer: filmaj <[email protected]> Committed: Tue Apr 25 17:26:17 2017 -0700 ---------------------------------------------------------------------- src/gitutil.js | 4 ++++ src/platform-release.js | 11 ++------- src/plugin-release.js | 55 ++++++++++++++++++++++++++++++++------------ src/versionutil.js | 7 ++++++ 4 files changed, 53 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-coho/blob/ba4dd933/src/gitutil.js ---------------------------------------------------------------------- diff --git a/src/gitutil.js b/src/gitutil.js index 058ff96..dcc7fcd 100644 --- a/src/gitutil.js +++ b/src/gitutil.js @@ -136,6 +136,10 @@ exports.gitCheckout = function*(branchName) { } } +exports.createNewBranch = function*(branchName) { + return yield executil.execHelper(executil.ARGS('git branch ', branchName)); +} + exports.localBranchExists = function*(name) { return !!(yield executil.execHelper(executil.ARGS('git branch --list ' + name), true)); } http://git-wip-us.apache.org/repos/asf/cordova-coho/blob/ba4dd933/src/platform-release.js ---------------------------------------------------------------------- diff --git a/src/platform-release.js b/src/platform-release.js index 3ea90b1..9e9df33 100644 --- a/src/platform-release.js +++ b/src/platform-release.js @@ -43,13 +43,6 @@ function createPlatformDevVersion(version) { return parts.join('.') + '-dev'; } -function getVersionBranchName(version) { - if (/-dev$/.test(version)) { - return 'master'; - } - return version.replace(/\d+(-?rc\d)?$/, 'x'); -} - function cpAndLog(src, dest) { print('Coping File:', src, '->', dest); // Throws upon failure. @@ -215,7 +208,7 @@ exports.prepareReleaseBranchCommand = function*() { yield repoutil.forEachRepo(repos, function*(repo) { var platform = repo.id; var version = yield handleVersion(repo, argv.version,true); - var branchName = getVersionBranchName(version); + var branchName = versionutil.getReleaseBranchNameFromVersion(version); yield gitutil.stashAndPop(repo, function*() { // git fetch + update master @@ -296,7 +289,7 @@ exports.tagReleaseBranchCommand = function*(argv) { var repos = flagutil.computeReposFromFlag(argv.r); var version = flagutil.validateVersionString(argv.version); var pretend = argv.pretend; - var branchName = getVersionBranchName(version); + var branchName = versionutil.getReleaseBranchNameFromVersion(version); // First - perform precondition checks. yield repoupdate.updateRepos(repos, [], true); http://git-wip-us.apache.org/repos/asf/cordova-coho/blob/ba4dd933/src/plugin-release.js ---------------------------------------------------------------------- diff --git a/src/plugin-release.js b/src/plugin-release.js index 2a0a7e4..6b64b2a 100644 --- a/src/plugin-release.js +++ b/src/plugin-release.js @@ -359,31 +359,63 @@ function *interactive_plugins_release() { console.log('Writing out new release notes and plugin versions (if applicable)...'); yield repoutil.forEachRepo(plugin_repos, function*(repo) { var plugin_name = repo.repoName; - if (plugin_data[repo.repoName].current_release != release_notes[plugin_name + '-version']) { + if (plugin_data[plugin_name].current_release != release_notes[plugin_name + '-version']) { // Overwrite plugin version if, after release notes review, RM decided on a different version. - plugin_data[repo.repoName].current_release = release_notes[plugin_name + '-version']; - yield versionutil.updateRepoVersion(repo, plugin_data[repo.repoName].current_release, {commitChanges:false}); + plugin_data[plugin_name].current_release = release_notes[plugin_name + '-version']; + yield versionutil.updateRepoVersion(repo, plugin_data[plugin_name].current_release, {commitChanges:false}); } fs.writeFileSync(tweak_release_notes.FILE, release_notes[plugin_name], {encoding: 'utf8'}); linkify.file(tweak_release_notes.FILE); /* - commit changes to versions and release notes together with description '$JIRA Updated version and release notes for release $v' * - tag each plugin repo with $v*/ if (yield gitutil.pendingChangesExist()) { - yield gitutil.commitChanges(plugins_release_issue.key + ' Updated version and RELEASENOTES.md for release ' + plugin_data[repo.repoName].current_release); - yield gitutil.tagRepo(plugin_data[repo.repoName].current_release); + yield gitutil.commitChanges(plugins_release_issue.key + ' Updated version and RELEASENOTES.md for release ' + plugin_data[plugin_name].current_release); + yield gitutil.tagRepo(plugin_data[plugin_name].current_release); } else { - console.warn('No pending changes detected for ' + repo.repoName + '; that\'s probably not good eh?'); + console.warn('No pending changes detected for ' + plugin_name + '; that\'s probably not good eh?'); } }); })(); + }).then(function() { + /* 10. Create release branch.Check if release branch, which would be named in the form "major.minor.x" (i.e. 2.3.x) already exists */ + return co.wrap(function *() { + var repos_with_existing_release_branch = []; + yield repoutil.forEachRepo(plugin_repos, function*(repo) { + var plugin_name = repo.repoName; + var plugin_version = plugin_data[plugin_name].current_release; + var release_branch_name = versionutil.getReleaseBranchNameFromVersion(plugin_version); + if (yield gitutil.remoteBranchExists(repo, release_branch_name)) { + repos_with_existing_release_branch.push(repo); + } else { + yield gitutil.createNewBranch(release_branch_name); + console.log('Created branch', release_branch_name, 'in repo', plugin_name); + } + }); + })(); + }).then(function(repos_with_existing_release_branch) { + // Here we are passed an array of repos that already had release branches created prior to starting the release process here. + // Our mission in this clause, should we choose to accept it, is to merge master back into the branch. But, this can be dangerous! + // Should we ask the user to handle the merge / cherry pick, then? Or should we merge automatically? + console.warn('Some release branches already exist!'); + console.warn('You will need to handle these repos manually!'); + var prompts = []; + repos_with_existing_branch_name.forEach(function(repo) { + var plugin_name = repo.repoName; + var rb = versionutil.getReleaseBranchFromVersion(plugin_data[plugin_name].current_version) + prompts.push({ + type: 'confirm', + name: 'rb_proceed_' + plugin_name, + message: plugin_name + ' already has an existing release branch ' + rb + '. You will need to manually merge or cherry-pick the master branch into the ' + rb + ' branch. Once you have done this (probably in a separate shell or command prompt), hit Enter to continue.' + }); + }); + return inquirer.prompt(prompts); }); }, function(auth_err) { var keys = Object.keys(auth_err); console.error('ERROR! There was a problem connecting to JIRA, received a', auth_err.statusCode, 'status code.'); process.exit(1); }); - /* 10. Create release branch. if this is a patch release, it may already exist! in that case, merge master back into this existing release branch. - * 11. Increment plugin versions back on the master branch to include -dev.. i think? + /* 11. Increment plugin versions back on the master branch to include -dev * 12. Push tags, release branch, and master branch changes. * 13. Publish to apache svn: * - repo-clone the dist and dist/dev svn repos @@ -424,13 +456,6 @@ function createPlatformDevVersion(version) { return parts.join('.') + '-dev'; } -function getVersionBranchName(version) { - if (/-dev$/.test(version)) { - return 'master'; - } - return version.replace(/\d+(-?rc\d)?$/, 'x'); -} - function cpAndLog(src, dest) { print('Coping File:', src, '->', dest); // Throws upon failure. http://git-wip-us.apache.org/repos/asf/cordova-coho/blob/ba4dd933/src/versionutil.js ---------------------------------------------------------------------- diff --git a/src/versionutil.js b/src/versionutil.js index c6613bf..7fd7b52 100644 --- a/src/versionutil.js +++ b/src/versionutil.js @@ -70,6 +70,13 @@ function updatePlatformsConfig(newValues) { } exports.updatePlatformsConfig = updatePlatformsConfig; +exports.getReleaseBranchNameFromVersion = function(version) { + if (/-dev$/.test(version)) { + return 'master'; + } + return version.replace(/\d+(-?rc\d)?$/, 'x'); +} + /** * Updates VERSION file, version executable script, package.json and * plugin.xml(s) using specified version. Also commits change made to the repo --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
