-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpull.js
More file actions
87 lines (74 loc) · 2.37 KB
/
pull.js
File metadata and controls
87 lines (74 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
const download = require('download-git-repo'),
commander = require('commander'),
path = require('path'),
chalk = require('chalk'),
fs = require('fs-extra'),
mkdirp = require('mkdirp-sync'),
pkg = require('./package.json'),
config = pkg.config.repositories || {},
sourceFolder = path.resolve('src');
commander.version(pkg.version)
.option('-o, --overwrite [overwrite]', 'overwrite the source folder contents', false)
.option('-r, --repo [repo]', 'name of the repository to pull', config.src)
.option('-d, --dest [dest]', 'the destination folder', sourceFolder)
.option('-a, --auth [auth]', 'the authorization token', config.access_token)
.option('-c, --clone [clone]', 'clone the repository', config.clone)
.option('-y, --yes [yes]', 'autorun', false)
.parse(process.argv);
const repo = commander.repo,
dest = commander.dest,
clone = !!commander.clone,
auto = !!commander.yes,
overwrite = !!commander.overwrite,
authorization = commander.auth ? `Authorization: token ${commander.auth}` : null;
const downloadRepo = function (repo, dest, overwrite) {
const opts = {
clone,
authorization
};
const done = function (err) {
if (err) {
console.error(err);
} else {
console.log(chalk.green(`repository (${repo}) pulled successfully into folder [${dest}]`));
}
};
if (!fs.existsSync(dest)) {
mkdirp(dest);
}
fs.readdir(dest, function (err, files) {
if (err) console.error(err)
else {
if (!files.length || overwrite) {
fs.removeSync(dest);
download(repo, dest, opts, done);
}
}
});
};
if ((repo && repo.length && dest.length) || overwrite || auto) {
if (!fs.existsSync(sourceFolder)) {
mkdirp(sourceFolder);
}
fs.readdir(sourceFolder, function (err, files) {
if (err) console.error(err)
else {
if ((!files.length && !!repo) || (overwrite && !!repo)) {
console.log(chalk.orange(`loading src from repository ${repo} into folder ${sourceFolder}`));
downloadRepo(repo, sourceFolder, overwrite);
}
if (!files.length || overwrite) {
const ignoreKeys = ['src', 'clone', 'access_token'];
Object.keys(config).forEach(function (key) {
const val = config[key];
if (val && ignoreKeys.indexOf(key) == -1) {
const dest = `${sourceFolder}/${key}`;
console.log(chalk.cyan(`loading repository ${val} into folder ${dest}`));
downloadRepo(val, dest, true);
}
});
}
}
});
}
module.exports = downloadRepo;