This repository has been archived by the owner on Jun 2, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 749
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
250 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
/**! | ||
* cnpmjs.org - bin/restore_module_deps.js | ||
* | ||
* Copyright(c) 2014 | ||
* MIT Licensed | ||
* | ||
* Authors: | ||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com) | ||
*/ | ||
|
||
"use strict"; | ||
|
||
/** | ||
* Module dependencies. | ||
*/ | ||
|
||
var mysql = require('../common/mysql'); | ||
var Module = require('../proxy/module'); | ||
var ModuleDeps = require('../proxy/module_deps'); | ||
|
||
var addCount = 0; | ||
|
||
function restore(id, callback) { | ||
var sql = 'SELECT id, name, package FROM module WHERE id > ? ORDER BY id ASC LIMIT 1000'; | ||
mysql.query(sql, [id], function (err, rows) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
if (rows.length === 0) { | ||
return callback(null, []); | ||
} | ||
|
||
console.log('[%s] got %d rows', id, rows.length); | ||
|
||
rows.forEach(function (r) { | ||
Module.parseRow(r); | ||
if (!r.package) { | ||
return; | ||
} | ||
var deps = Object.keys(r.package.dependencies || {}); | ||
if (!Array.isArray(deps) || !deps.length) { | ||
return; | ||
} | ||
deps.forEach(function (dep) { | ||
ModuleDeps.add(dep, r.name, function (err) { | ||
// console.log('[%s] add %s <= %s, error: %s', id, dep, r.name, err); | ||
}); | ||
}); | ||
addCount += deps.length; | ||
}); | ||
setTimeout(function () { | ||
console.log('[%s] add %d relations', id, addCount); | ||
callback(null, rows); | ||
}, 1000); | ||
}); | ||
} | ||
|
||
var id = 0; | ||
function run() { | ||
restore(id, function (err, rows) { | ||
if (err) { | ||
throw err; | ||
} | ||
if (rows.length === 0) { | ||
console.log('finished, last id: %s, exit.', id); | ||
process.exit(0); | ||
} | ||
|
||
id = rows[rows.length - 1].id; | ||
run(); | ||
}); | ||
} | ||
|
||
run(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
CREATE TABLE `module_deps` ( | ||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key', | ||
`gmt_create` datetime NOT NULL COMMENT 'create time', | ||
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name', | ||
`deps` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'which module depend on this module', | ||
PRIMARY KEY (`id`), | ||
UNIQUE KEY `name_deps` (`name`,`deps`), | ||
KEY `name` (`name`) | ||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='module deps'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/**! | ||
* cnpmjs.org - proxy/module_deps.js | ||
* | ||
* Copyright(c) 2014 | ||
* MIT Licensed | ||
* | ||
* Authors: | ||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com) | ||
*/ | ||
|
||
"use strict"; | ||
|
||
/** | ||
* Module dependencies. | ||
*/ | ||
|
||
var mysql = require('../common/mysql'); | ||
|
||
var LIST_DEPS_SQL = 'SELECT deps FROM module_deps WHERE name=?;'; | ||
|
||
exports.list = function (name, callback) { | ||
mysql.query(LIST_DEPS_SQL, [name], callback); | ||
}; | ||
|
||
var INSERT_DEPS_SQL = 'INSERT INTO module_deps(gmt_create, name, deps) \ | ||
VALUES(now(), ?, ?);'; | ||
|
||
exports.add = function (name, deps, callback) { | ||
mysql.query(INSERT_DEPS_SQL, [name, deps], function (err, result) { | ||
if (err && err.code === 'ER_DUP_ENTRY') { | ||
err = null; | ||
} | ||
callback(err); | ||
}); | ||
}; | ||
|
||
var DELETE_DEPS_SQL = 'DELETE FROM module_deps WHERE name=? AND deps=?;'; | ||
|
||
exports.remove = function (name, deps, callback) { | ||
mysql.query(DELETE_DEPS_SQL, [name, deps], callback); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
/**! | ||
* cnpmjs.org - test/proxy/module_deps.test.js | ||
* | ||
* Copyright(c) 2014 | ||
* MIT Licensed | ||
* | ||
* Authors: | ||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com) | ||
*/ | ||
|
||
"use strict"; | ||
|
||
/** | ||
* Module dependencies. | ||
*/ | ||
|
||
var should = require('should'); | ||
var pedding = require('pedding'); | ||
var ModuleDeps = require('../../proxy/module_deps'); | ||
|
||
describe('proxy/module_deps.test.js', function () { | ||
before(function (done) { | ||
done = pedding(2, done); | ||
ModuleDeps.remove('testmodule', 'foo', done); | ||
ModuleDeps.remove('testmodule', 'bar', done); | ||
}); | ||
|
||
describe('add()', function () { | ||
it('should add foo, bar success', function (done) { | ||
done = pedding(2, done); | ||
ModuleDeps.add('testmodule', 'foo', function (err) { | ||
should.not.exist(err); | ||
// add again should work | ||
ModuleDeps.add('testmodule', 'foo', function (err) { | ||
should.not.exist(err); | ||
done(); | ||
}); | ||
}); | ||
|
||
ModuleDeps.add('testmodule', 'bar', done); | ||
}); | ||
}); | ||
|
||
describe('list()', function () { | ||
it('should list testmodule deps', function (done) { | ||
ModuleDeps.list('testmodule', function (err, rows) { | ||
should.not.exist(err); | ||
should.exist(rows); | ||
rows.should.be.an.Array; | ||
rows.should.length(2); | ||
rows.forEach(function (row) { | ||
row.should.have.property('deps'); | ||
}); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters