Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/utils/lib/narwhal/tusk/clone.js
blob: 425dc5c76e07999174f275c6f43825a1192c7daf (plain)
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

var tusk = require("../tusk");
var os = require("os");
var util = require("util");
var args = require("args");

var parser = exports.parser = new args.Parser();

parser.help('clones a package from its version control system.')

parser.args('package');

parser.option('-o', '--owner', 'owner')
    .help("clone from the owner's repository")
    .bool()
    .inverse();

parser.option('-u', '--user', 'user')
    .help('overrides the user name from which to clone the package')
    .set();

parser.action(function (options) {
    var self = this;
    if (!util.len(options.args))
        throw new Error("Package name required");
    var packagesDirectory = tusk.getPackagesDirectory();
    var sources = tusk.readSources().packages;
    var catalog = tusk.readCatalog().packages;
    var owner = options.owner;
    options.args.forEach(function (name) {
        if (!util.has(sources, name))
            throw new Error("Package does not exist: " + name);
        var source = util.get(sources, name);
        if (source.type !== "github")
            throw new Error("Package " + util.enquote(name) + " is not a Github package.");
    });
    options.args.forEach(function (name) {
        var source = util.get(sources, name);
        var githubName = util.get(source, 'name', name);
        var user = options.user || source.user;
        var command = [
            'git',
            'clone',
            owner ?
            (
                'git@github.com:' + user +
                '/' + githubName + '.git'
            ):
            (
                'git://github.com/' +
                user + '/' + githubName + '.git'
            ),
            packagesDirectory.join(name)
        ];
        self.print('\0cyan(' + command.map(function (term) {
            var enquoted = os.enquote(term);
            if (enquoted != "'" + term + "'")
                return enquoted;
            return term;
        }).join(' ') + '\0)');
        os.system(command);
    });
});

parser.helpful();