You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by fi...@apache.org on 2017/01/20 02:19:01 UTC

cordova-coho git commit: auto-detect which plugins need releasing now works.

Repository: cordova-coho
Updated Branches:
  refs/heads/plugins-releaser 3e6f5db74 -> ec4ee7f1d


auto-detect which plugins need releasing now works.


Project: http://git-wip-us.apache.org/repos/asf/cordova-coho/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-coho/commit/ec4ee7f1
Tree: http://git-wip-us.apache.org/repos/asf/cordova-coho/tree/ec4ee7f1
Diff: http://git-wip-us.apache.org/repos/asf/cordova-coho/diff/ec4ee7f1

Branch: refs/heads/plugins-releaser
Commit: ec4ee7f1da55e5f313b8d577accb96c34897c845
Parents: 3e6f5db
Author: filmaj <ma...@gmail.com>
Authored: Thu Jan 19 18:18:54 2017 -0800
Committer: filmaj <ma...@gmail.com>
Committed: Thu Jan 19 18:18:54 2017 -0800

----------------------------------------------------------------------
 src/gitutil.js        |  4 +++
 src/plugin-release.js | 66 +++++++++++++++++++++++++++++++++++++++-------
 2 files changed, 61 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-coho/blob/ec4ee7f1/src/gitutil.js
----------------------------------------------------------------------
diff --git a/src/gitutil.js b/src/gitutil.js
index b8dad09..270268e 100644
--- a/src/gitutil.js
+++ b/src/gitutil.js
@@ -158,3 +158,7 @@ exports.resetFromOrigin = function() {
 exports.gitClean = function() {
     return executil.execHelper(executil.ARGS('git clean -d -f'), false, true);
 }
+
+exports.summaryOfChanges = function(base_sha) {
+    return executil.execHelper(executil.ARGS('git log --oneline --topo-order --no-merges ' + base_sha + '..master'), true, false);
+}

http://git-wip-us.apache.org/repos/asf/cordova-coho/blob/ec4ee7f1/src/plugin-release.js
----------------------------------------------------------------------
diff --git a/src/plugin-release.js b/src/plugin-release.js
index 59fd370..c481845 100644
--- a/src/plugin-release.js
+++ b/src/plugin-release.js
@@ -48,6 +48,13 @@ var plugins_release_issue; // store ref to jira issue tracking release.
 var jira_issue_types; // store ref to all issue types supported by our JIRA instance
 var jira_task_issue; // store ref to the "task" issue type
 var plugin_base; // parent directory holding all cordova plugins
+var plugin_repos; // which plugins are we messing with?
+var plugin_data = {}; // massive object containing plugin release-relevant information
+var plugins_to_release = []; // array of plugin names that need releasing
+var plugins_ommitted = []; // array of plugin names that DO NOT need releasing
+
+function ask_for_plugin_parent_dir() {
+}
 
 function *interactive_plugins_release() {
     console.log('Hi! So you want to do a plugins release, do you?');
@@ -183,12 +190,12 @@ function *interactive_plugins_release() {
         }).then(function(jira_issue) {
             console.log('Sweet, our Plugins Release JIRA issue is ' + jira_issue.key + ' (https://issues.apache.org/jira/browse/' + jira_issue.key + ')!');
             plugins_release_issue = jira_issue;
-            /* Time for step 5: update the repos. */
+            /* 5: update the repos. */
             return inquirer.prompt([{
                 type: 'input',
                 name: 'cwd',
                 default: apputil.getBaseDir(),
-                message: 'We need to update the plugin repositories. Enter the directory containing all your plugin repository source code (absolute or relative paths work here)'
+                message: 'We need to update the plugin repositories. Enter the directory containing all of your plugin source code repositories (absolute or relative paths work here)'
             }, {
                 type: 'confirm',
                 name: 'ok',
@@ -200,29 +207,70 @@ function *interactive_plugins_release() {
             if (answers.ok) {
                 plugin_base = path.resolve(path.normalize(answers.cwd));
                 // TODO: is `plugins_base` pass-able to cloneRepos here?
-                var plugin_repos = flagutil.computeReposFromFlag('plugins', {includeSvn:true});
+                plugin_repos = flagutil.computeReposFromFlag('plugins', {includeSvn:true});
                 // TODO: wrapping yields in co is fugly
                 return co.wrap(function *() {
-                    yield repoclone.cloneRepos(plugin_repos, false, null);
+                    yield repoclone.cloneRepos(plugin_repos, /*silent*/true, null);
                     yield reporeset.resetRepos(plugin_repos, ['master']);
                     yield repoupdate.updateRepos(plugin_repos, ['master'], /*noFetch*/false);
                     return true;
                 })();
             } else {
-                console.error('Well you should type in the correct location the first time. Or this section of coho code should be coded more robustly! Contributions welcome :P');
-                console.error('Please try again.');
+                console.error('We cannot continue without the correct location to the plugin repositories. Try again.');
                 process.exit(4);
             }
         }).then(function() {
-            console.log('ok plugins are updated at this point, onwards!');
+            /* 6. auto-identify plugins that need changes, ask user to confirm at end. if wrong, ask user to manually input.*/
+            console.log('Will attempt to auto-identify which plugins need changes... hold on to yer butt!');
+            return co.wrap(function *() {
+                yield repoutil.forEachRepo(plugin_repos, function*(repo) {
+                    if (repo.repoName == 'cordova-plugins') return;
+                    var last_release = (yield gitutil.findMostRecentTag())[0];
+                    plugin_data[repo.repoName] = {
+                        last_release: last_release
+                    };
+                    var changes = (yield gitutil.summaryOfChanges(last_release)).split('\n').filter(function(line) {
+                        return (line.toLowerCase().indexOf('incremented plugin version') == -1);
+                    });
+                    if (changes.length > 0) {
+                        plugin_data[repo.repoName].needs_release = true;
+                        plugin_data[repo.repoName].changes = changes;
+                        plugins_to_release.push(repo.repoName);
+                    } else {
+                        plugin_data[repo.repoName].needs_release = false;
+                        plugins_ommitted.push(repo.repoName);
+                    }
+                });
+            })();
+        }).then(function() {
+            // TODO: handle the 'no plugins to release case'? is it even worth it?
+            return inquirer.prompt({
+                type: 'confirm',
+                name: 'plugins_ok',
+                message: 'I\'ve detected ' + plugins_to_release.length + ' plugin' + (plugins_to_release.length==1?'':'s') + ' to release: ' + plugins_to_release.join(', ') + '\nThat means we\'re skipping ' + plugins_ommitted.length + ' plugin' + (plugins_ommitted.length==1?'':'s') + ': ' + plugins_ommitted.join(', ') + '\nDo you want to proceed with the release process around the specified plugins above (and ommitting the ones specified as well)?'
+            });
+        }).then(function(answers) {
+            if (answers.plugins_ok) {
+                return plugins_to_release;
+            } else {
+                return inquirer.prompt({
+                    type: 'input',
+                    name: 'plugins_list',
+                    message: 'Please enter the exact names of the plugin repositories you want to release, manually, with a space separating each plugin name'
+                }).then(function(answer) {
+                    return answer.plugins_list;
+                });
+            }
+        }).then(function(plugins_list) {
+            // at this point we either have a verified, or manually-specified, list of plugins to release.
+            plugins_to_release = plugins_list;
         });
     }, 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);
     });
-    /* 6. ask user if they have a specific list of plugins to release, OR, auto-identify which plugins have changes. if auto-identifying, ask user to confirm at end. if wrong, ask user to manually input.
-     * 7. ensure license headers are present everywhere.
+    /* 7. ensure license headers are present everywhere.
      * 8. ensure all dependencies and subdependencies have apache-compatible licenses.
      * 9. update plugin versions + release notes.
      *   - for each plugin, remove the `-dev` suffix in plugin.xml, package.json, and plugin.xml of `tests/` subdirectory (if exists)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org