You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2013/09/05 22:19:13 UTC

git commit: Add flag to repo-status for diffing 2 local branches.

Updated Branches:
  refs/heads/master 1be586bf2 -> edb206f4e


Add flag to repo-status for diffing 2 local branches.


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

Branch: refs/heads/master
Commit: edb206f4e9923b54e9d762d4fe6117f483cbc9af
Parents: 1be586b
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Sep 5 16:18:44 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Sep 5 16:18:44 2013 -0400

----------------------------------------------------------------------
 coho | 42 +++++++++++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-coho/blob/edb206f4/coho
----------------------------------------------------------------------
diff --git a/coho b/coho
index 141e11d..ed78386 100755
--- a/coho
+++ b/coho
@@ -746,14 +746,22 @@ function repoStatusCommand(argv) {
     var opt = optimist
         .options('b', {
             alias: 'branch',
-            desc: 'The name of the branch to report on. Can be specified multiple times to specify multiple branches.',
+            desc: 'The name of the branch to report on. Can be specified multiple times to specify multiple branches. The local version of the branch is compared with the origin\'s version unless --b2 is specified.',
             default: 'master'
-         });
+         })
+        .options('branch2', {
+            desc: 'The name of the branch to diff against. This is origin/$branch by default.'
+         })
+        .options('diff', {
+            desc: 'Show a diff of the changes (use --no-diff to disable)',
+            default: true
+         })
     opt = registerHelpFlag(opt);
     var argv = opt
         .usage('Reports what changes exist locally that are not yet pushed.\n' +
                '\n' +
-               'Usage: $0 repo-status -r auto -b master -b 2.9.x')
+               'Example usage: $0 repo-status -r auto -b master -b 2.9.x\n' +
+               'Example usage: $0 repo-status -r plugins -b dev --branch2 master --no-diff')
         .argv;
 
     if (argv.h) {
@@ -761,35 +769,43 @@ function repoStatusCommand(argv) {
         process.exit(1);
     }
     var branches = Array.isArray(argv.b) ? argv.b : [argv.b];
+    var branches2 = Array.isArray(argv.branch2) ? argv.branch2 : [argv.branch2];
     var repos = computeReposFromFlag(argv.r);
 
+    if (branches.length != branches2.length) {
+        fatal('Must specify the same number of --branch and --branch2 flags');
+    }
+
     var logs = '';
     var diffs = '';
 
     forEachRepo(repos, function(repo) {
         // Determine remote name.
         updateRepos([repo], [], true);
-        branches.forEach(function(branchName) {
+        branches.forEach(function(branchName, i) {
             if (!localBranchExists(branchName)) {
                 return;
             }
-            gitCheckout(branchName);
-            var targetBranch = remoteBranchExists(repo, branchName) ? branchName : 'master';
-            var changes = execHelper('git log --oneline ' + repo.remoteName + '/' + targetBranch + '..' + branchName, true);
+            var targetBranch = branches2[i] || (remoteBranchExists(repo, branchName) ? repo.remoteName + '/' + branchName : 'master');
+            var changes = execHelper('git log --oneline ' + targetBranch + '..' + branchName, true);
             if (changes) {
-                logs += repo.repoName + ' on branch ' + branchName + ': Local commits exist.\n';
+                logs += repo.repoName + ' on branch ' + branchName + ' (vs ' + targetBranch + '): Commits exist.\n';
                 logs += changes + '\n';
-                diffs += 'Diff for for ' + repo.repoName + ' on branch ' + branchName + ' (truncated):\n';
-                diffs += execHelper('git diff ' + repo.remoteName + '/' + targetBranch + '..' + branchName, true).split('\n').slice(0, 30).join('\n');
-                diffs += '\n\n';
+                if (argv.diff) {
+                    diffs += 'Diff (truncated) for ' + repo.repoName + ' on branch ' + branchName + ' (vs ' + targetBranch + '):\n';
+                    diffs += execHelper('git diff ' + targetBranch + '..' + branchName, true).split('\n').slice(0, 30).join('\n');
+                    diffs += '\n\n';
+                }
             } else {
-                logs += repo.repoName + ' on branch ' + branchName + ': No local commits\n';
+                logs += repo.repoName + ' on branch ' + branchName + ' (vs ' + targetBranch + '): No changes\n';
             }
         });
     });
     print('\n\n');
     print(logs);
-    print(diffs);
+    if (argv.diff) {
+        print(diffs);
+    }
 }
 
 function repoResetCommand(argv) {