Skip to content

display new scm revisionData #8

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 1 commit into from
Mar 30, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,31 @@ Display a list of deployed revisions using [ember-cli-deploy](https://github.com

* `ember install ember-cli-deploy-display-revisions`

## Configuration Options

### Defaults

```
ENV['display-revisions'] = {
amount: 10,
revisions: function(context) {
return context.revisions;
}
}
```

### amount

Number of revisions displayed in the results table

*Default:* `10`

### revisions

The data to be displayed

*Default:* `context.revisions`, usually received from `fetchRevisions`

## Usage

* `ember deploy:list <environment>` to list the latest 10 revisions
Expand Down
104 changes: 17 additions & 87 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
'use strict';

var DeployPluginBase = require('ember-cli-deploy-plugin');
var moment = require('moment');
var ScmTable = require('./lib/scm-table');
var LegacyTable = require('./lib/legacy-table');
var _ = require('lodash');

module.exports = {
name: 'ember-cli-deploy-display-revisions',
Expand All @@ -15,103 +17,31 @@ module.exports = {
amount: function(context) {
return context.commandOptions.amount || 10;
},

revisions: function(context) {
return context.revisions;
}
},

displayRevisions: function(context) {
if(!context.revisions) {
var table;
var revisions = this.readConfig('revisions');
if(!revisions || revisions.length === 0) {
this.log("Could not display latest revisions because no revisions were found in context.", {color: 'yellow'});
return;
}

var revisions = context.revisions.slice(0, this.readConfig("amount"));

var keys = this._getKeys(revisions);
revisions = revisions.slice(0, this.readConfig("amount"));

this._displayHeader(keys, revisions);
var hasRevisionData = _.every(revisions, 'revisionData');

revisions.forEach(function(revision) {
this._displayRow(keys, revision);
}.bind(this));
},
_displayRow: function(keys, revision) {
var row = "";
if(revision.active) {
row += ">";
if (hasRevisionData) {
table = new ScmTable(this, revisions);
table.display();
} else {
row += " ";
table = new LegacyTable(this, revisions);
table.display();
}

var lastKey = keys[keys.length - 1];

keys.forEach(function(key) {
var value = revision[key.name] ? revision[key.name] : "";

if(key.name === 'timestamp') {
value = moment(value).format("YYYY/MM/DD HH:mm:ss");
}

if(key.maxLength !== -1) {
value = String(value).substr(0, key.maxLength);
}

row += " " + value + " ";

var fillerLength = key.maxLength - value.length;
for(var i = 0; i < fillerLength; i++) {
row += " ";
}
if(key !== lastKey) {
row += "|";
}
});

this.log(row);
},
_getKeys: function(revisions) {
var keys = [
{name: 'version', maxLength: 7},
{name: 'timestamp', maxLength: 19},
{name: 'deployer', maxLength: 10},
{name: 'revision', maxLength: -1}
];
var presentKeys = [];
keys.forEach(function(key) {
if(this._hasKey(key.name, revisions)) {
presentKeys.push(key);
}
}.bind(this));
return presentKeys;
},
_displayHeader: function(keys) {
var keyHeader = " ";
var lastKey = keys[keys.length - 1];

keys.forEach(function(key) {
var shortKey = key.maxLength === -1 ? key.name : key.name.substr(0, key.maxLength);
keyHeader += " " + shortKey + " ";

var fillerLength = key.maxLength === -1 ? 0 : key.maxLength - shortKey.length;
for(var i = 0; i < fillerLength; i++) {
keyHeader += " ";
}

// revision hash needs an unknown amount of space, don't display closing |
if(key !== lastKey) {
keyHeader += "|";
}
});
this.log(keyHeader);

var underline = "";
for(var i = 0; i < keyHeader.length; i++) {
underline += "=";
}
this.log(underline);
},
_hasKey: function(key, revisions) {
return revisions.some(function(revision) {
return Object.keys(revision).indexOf(key) !== -1;
});
}
});

Expand Down
109 changes: 109 additions & 0 deletions lib/legacy-table.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
var moment = require('moment');

var CoreObject = require('core-object');
var Promise = require('ember-cli/lib/ext/promise');

module.exports = CoreObject.extend({
init: function(plugin, revisions) {
this._plugin = plugin;
this.revisions = revisions;
},

log: function() {
this._plugin.log.apply(this._plugin, arguments);
},

display: function() {
var revisions = this.revisions;
var keys = this._getKeys(revisions);

this._displayHeader(keys, revisions);

revisions.forEach(function(revision) {
this._displayRow(keys, revision);
}.bind(this));
},

_displayRow: function(keys, revision) {
var row = "";
if(revision.active) {
row += ">";
} else {
row += " ";
}

var lastKey = keys[keys.length - 1];

keys.forEach(function(key) {
var value = revision[key.name] ? revision[key.name] : "";

if(key.name === 'timestamp') {
value = moment(value).format("YYYY/MM/DD HH:mm:ss");
}

if(key.maxLength !== -1) {
value = String(value).substr(0, key.maxLength);
}

row += " " + value + " ";

var fillerLength = key.maxLength - value.length;
for(var i = 0; i < fillerLength; i++) {
row += " ";
}
if(key !== lastKey) {
row += "|";
}
});

this.log(row);
},

_getKeys: function(revisions) {
var keys = [
{name: 'version', maxLength: 7},
{name: 'timestamp', maxLength: 19},
{name: 'deployer', maxLength: 10},
{name: 'revision', maxLength: -1}
];
var presentKeys = [];
keys.forEach(function(key) {
if(this._hasKey(key.name, revisions)) {
presentKeys.push(key);
}
}.bind(this));
return presentKeys;
},

_displayHeader: function(keys) {
var keyHeader = " ";
var lastKey = keys[keys.length - 1];

keys.forEach(function(key) {
var shortKey = key.maxLength === -1 ? key.name : key.name.substr(0, key.maxLength);
keyHeader += " " + shortKey + " ";

var fillerLength = key.maxLength === -1 ? 0 : key.maxLength - shortKey.length;
for(var i = 0; i < fillerLength; i++) {
keyHeader += " ";
}

// revision hash needs an unknown amount of space, don't display closing |
if(key !== lastKey) {
keyHeader += "|";
}
});
this.log(keyHeader);

var underline = "";
for(var i = 0; i < keyHeader.length; i++) {
underline += "=";
}
this.log(underline);
},
_hasKey: function(key, revisions) {
return revisions.some(function(revision) {
return Object.keys(revision).indexOf(key) !== -1;
});
}
});
82 changes: 82 additions & 0 deletions lib/scm-table.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/* jshint node: true */
var Table = require('cli-table2');
var moment = require('moment');

var CoreObject = require('core-object');
var Promise = require('ember-cli/lib/ext/promise');

module.exports = CoreObject.extend({
init: function(plugin, revisions) {
this._plugin = plugin;
this.revisions = revisions;
},

display: function(revisions) {
var table = this._createTable();
this._tableRows(table);

this._plugin.logRaw(table.toString());
return Promise.resolve();
},

_isWide: function() {
return process.stdout.columns >= 98;
},

_tableHeader: function() {
var head = ['RevisionKey', 'Commit', 'User', 'Branch'];

if (this._isWide()) {
head.push('Deploy time');
}
return head;
},

_createTable: function() {
var head = this._tableHeader();

return new Table({
head: head,
wordWrap: true,
chars: {
'top': '',
'top-mid': '',
'top-left': '',
'top-right': '',
'bottom': '',
'mid': '',
'middle': '',
'mid-mid': '',
'bottom-mid': '',
'bottom-left': '',
'bottom-right': '',
'left': '',
'left-mid': '',
'right': '',
'right-mid': ''
}
});
},

_tableRows: function(table) {
this.revisions.forEach(function(revision) {
var data = revision.revisionData;

var row = [
((revision.active) ? '> ' : ' ') + data.revisionKey,
data.scm.sha.substr(0,8),
data.scm.email,
data.scm.branch,
];

if (this._isWide()) {
var value = moment(data.timestamp).format("YYYY/MM/DD HH:mm:ss");
row.push(value);
}

table.push(row);

}.bind(this));
},

});
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,18 @@
"ember-export-application-global": "^1.0.2",
"ember-try": "0.0.4",
"glob": "^5.0.5",
"lodash": "^3.10.1",
"mocha": "^2.2.4"
},
"keywords": [
"ember-addon",
"ember-cli-deploy-plugin"
],
"dependencies": {
"cli-table2": "^0.2.0",
"core-object": "^2.0.0",
"ember-cli-babel": "^5.0.0",
"ember-cli-deploy-plugin": "^0.2.1",
"ember-cli-deploy-plugin": "^0.2.3",
"moment": "2.10.6"
},
"ember-addon": {
Expand Down
Loading