- feat: impl npm owner hooks
- fix: fix tagDir/packageDir for oss-cnpm
Showing 3 of 4 files from the diff.
lib/common.js
changed.
controllers/sync_module_worker.js
changed.
Other files ignored by Codecov
test/controllers/registry/package/update.test.js
has changed.
@@ -39,11 +39,11 @@
Loading
39 | 39 | }; |
|
40 | 40 | ||
41 | 41 | exports.getSyncTagDir = function (name) { |
|
42 | - | return `${name}/sync/tags`; |
|
42 | + | return `${name}/sync/tags/`; |
|
43 | 43 | }; |
|
44 | 44 | ||
45 | 45 | exports.getSyncPackageDir = function (name) { |
|
46 | - | return `${name}/sync/packages`; |
|
46 | + | return `${name}/sync/packages/`; |
|
47 | 47 | }; |
|
48 | 48 | ||
49 | 49 | const TAG_NAME_REG = /^tag-(.+)\.json$/; |
@@ -4,6 +4,7 @@
Loading
4 | 4 | var packageService = require('../../../services/package'); |
|
5 | 5 | var userService = require('../../../services/user'); |
|
6 | 6 | var config = require('../../../config'); |
|
7 | + | var hook = require('../../../services/hook'); |
|
7 | 8 | ||
8 | 9 | // PUT /:name/-rev/:rev |
|
9 | 10 | // |
@@ -158,6 +159,31 @@
Loading
158 | 159 | ||
159 | 160 | var r = yield packageService.updatePrivateModuleMaintainers(name, usernames); |
|
160 | 161 | debug('result: %j', r); |
|
162 | + | if (r.add && r.add.length) { |
|
163 | + | const envelope = { |
|
164 | + | event: 'package:owner', |
|
165 | + | name: name, |
|
166 | + | type: 'package', |
|
167 | + | version: null, |
|
168 | + | hookOwner: null, |
|
169 | + | payload: null, |
|
170 | + | change: null, |
|
171 | + | }; |
|
172 | + | hook.trigger(envelope); |
|
173 | + | } |
|
174 | + | if (r.remove && r.remove.length) { |
|
175 | + | const envelope = { |
|
176 | + | event: 'package:owner-rm', |
|
177 | + | name: name, |
|
178 | + | type: 'package', |
|
179 | + | version: null, |
|
180 | + | hookOwner: null, |
|
181 | + | payload: null, |
|
182 | + | change: null, |
|
183 | + | }; |
|
184 | + | hook.trigger(envelope); |
|
185 | + | } |
|
186 | + | ||
161 | 187 | ||
162 | 188 | this.status = 201; |
|
163 | 189 | this.body = { |
@@ -360,22 +360,36 @@
Loading
360 | 360 | const distTagDirFiles = yield nfs.list(distTagDir); |
|
361 | 361 | const distTagFileNames = distTagDirFiles.filter(fileName => common.isBackupTagFile(fileName)); |
|
362 | 362 | ||
363 | - | packageJsons = yield packageJsonFileNames.map(function* (packageJsonFileName) { |
|
363 | + | const packageJsonRes = yield gather(packageJsonFileNames.map(function* (packageJsonFileName) { |
|
364 | 364 | const version = common.getVersionFromFileName(packageJsonFileName); |
|
365 | 365 | return yield readPackage(name, version); |
|
366 | + | }), 5); |
|
367 | + | packageJsons = packageJsonRes.map(({ isError, error, value}) => { |
|
368 | + | if (isError) { |
|
369 | + | error.message = '[sync] read package.json failed: ' + error.message; |
|
370 | + | throw error; |
|
371 | + | } |
|
372 | + | return value; |
|
366 | 373 | }); |
|
367 | 374 | ||
368 | 375 | packageJsons = packageJsons.sort((a, b) => { |
|
369 | 376 | return a.publish_time - b.publish_time; |
|
370 | 377 | }); |
|
371 | 378 | ||
372 | - | tags = yield distTagFileNames.map(function* (tagFileName) { |
|
379 | + | const tagRes = yield gather(distTagFileNames.map(function* (tagFileName) { |
|
373 | 380 | const tag = common.getTagNameFromFileName(tagFileName); |
|
374 | 381 | const version = yield readDistTag(name, tag); |
|
375 | 382 | return { |
|
376 | 383 | tag, |
|
377 | 384 | version, |
|
378 | 385 | }; |
|
386 | + | })); |
|
387 | + | tags = tagRes.map(({ isError, error, value}) => { |
|
388 | + | if (isError) { |
|
389 | + | error.message = '[sync] read dist-tag failed: ' + error.message; |
|
390 | + | throw error; |
|
391 | + | } |
|
392 | + | return value; |
|
379 | 393 | }); |
|
380 | 394 | } catch (err) { |
|
381 | 395 | if (retryCount < 3) { |
@@ -471,6 +485,7 @@
Loading
471 | 485 | try { |
|
472 | 486 | yield nfs.download(packageJsonKey, filePath); |
|
473 | 487 | const packageJSONFile = yield mzFs.readFile(filePath, 'utf8'); |
|
488 | + | console.log('file: ', filePath, packageJSONFile); |
|
474 | 489 | const packageJSON = JSON.parse(packageJSONFile); |
|
475 | 490 | return packageJSON; |
|
476 | 491 | } finally { |
Files | Coverage |
---|---|
common | 66.67% |
controllers | 85.39% |
middleware | 94.34% |
models | 90.42% |
routes | 100.00% |
servers | 90.91% |
services | 92.13% |
sync | 89.61% |
config/index.js | 75.51% |
lib/common.js | 89.19% |
Project Totals (97 files) | 87.54% |
3638.1
3638.2
Sunburst
The inner-most circle is the entire project, moving away from the center are folders then, finally, a single file.
The size and color of each slice is representing the number of statements and the coverage, respectively.
Icicle
The top section represents the entire project. Proceeding with folders and finally individual files.
The size and color of each slice is representing the number of statements and the coverage, respectively.