Skip to content

Commit 73bf1a9

Browse files
committed
fixes plugin init order issue.
Signed-off-by: Eric Wang <[email protected]>
1 parent a37018d commit 73bf1a9

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

lib/commands/plugin.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,11 @@ cmd.handler = function(argv) {
7979
const name = argv.name;
8080

8181
if (argv.install) {
82-
const cb = function(e) {
82+
const cb = function(e, p) {
8383
if (e) return log.error(e);
84+
p.help();
85+
p.save();
8486
Plugin.init();
85-
Plugin.save();
8687
print();
8788
};
8889

lib/plugin.js

+15-13
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ Plugin.init = function(head) {
8484

8585
const stats = cache.get(h.KEYS.plugins) || {};
8686

87-
// 1. check installed plugins
88-
let plugins = [];
87+
// 1. find installed plugins
88+
let installed = [];
8989
for (let f of file.listCodeDir('lib/plugins')) {
9090
const p = f.data;
9191
if (!p) continue;
@@ -98,39 +98,41 @@ Plugin.init = function(head) {
9898
log.trace('new plugin, enable by default');
9999
p.enabled = true;
100100
}
101+
installed.push(p);
102+
}
103+
// the one with bigger `id` comes first
104+
installed = _.sortBy(installed, x => -x.id);
101105

106+
// 2. init all in reversed order
107+
for (let i = installed.length - 1; i >= 0; --i) {
108+
const p = installed[i];
102109
if (p.enabled) {
103110
p.init();
104111
log.trace('inited plugin: ' + p.name);
105112
} else {
106113
log.trace('skipped plugin: ' + p.name);
107114
}
108-
109-
plugins.push(p);
110115
}
111116

112-
// chain the plugins together
113-
// the one has bigger `id` comes first
114-
plugins = _.sortBy(plugins, x => -x.id);
115-
117+
// 3. chain together
118+
const plugins = installed.filter(x => x.enabled);
116119
let last = head;
117120
for (let p of plugins) {
118-
if (!p.enabled) continue;
119121
last.setNext(p);
120122
last = p;
121123
}
122124

123-
// 2. check saved plugins
125+
// 4. check missing plugins
124126
const missings = [];
125127
for (let k of _.keys(stats)) {
126-
if (plugins.find(x => x.name === k)) continue;
128+
if (installed.find(x => x.name === k)) continue;
127129
const p = new Plugin(-1, k, 'missing');
128130
p.enabled = stats[k];
129131
missings.push(p);
132+
log.trace('missing plugin:' + p.name);
130133
}
131-
log.trace('missing plugins: ' + missings.length);
132134

133-
Plugin.plugins = plugins.concat(missings);
135+
Plugin.plugins = installed.concat(missings);
134136
return missings.length === 0;
135137
};
136138

0 commit comments

Comments
 (0)