UNPKG

1.6 kBJavaScriptView Raw
1var pull = require('pull-stream')
2var paramap = require('pull-paramap')
3var multicb = require('multicb')
4var u = require('./util')
5var getAbout = require('ssb-avatar')
6var cat = require('pull-cat')
7
8function getForks(sbot, baseMsg) {
9 return cat([
10 pull.once(baseMsg),
11 pull(
12 sbot.links({
13 dest: baseMsg.key,
14 rel: 'upstream',
15 values: true
16 }),
17 pull.map(function (msg) {
18 msg.indent = baseMsg.indent + ' '
19 return getForks(sbot, msg)
20 }),
21 pull.flatten()
22 )
23 ])
24}
25
26module.exports = function repoForks(argv) {
27 process.stderr.write('Loading forks...\r')
28 var id = u.repoId(u.getRemoteUrl(argv._[0])) || u.getDefaultRemote()
29 if (!id)
30 err(1, 'unable to find git-ssb repo')
31
32 u.getSbot(argv, function (err, sbot) {
33 if (err) throw err
34 sbot.whoami(function (err, feed) {
35 if (err) throw err
36 sbot.get(id, function (err, msg) {
37 if (err) throw err
38 pull(
39 getForks(sbot, {key: id, value: msg, indent: ''}),
40 paramap(function (msg, cb) {
41 var done = multicb({pluck: 1, spread: true})
42 getAbout(sbot, feed.id, msg.value.author, done())
43 getAbout(sbot, feed.id, msg.key, done())
44 done(function (err, authorAbout, repoAbout) {
45 if (err) return cb(err)
46 cb(null, msg.indent + '- ' +
47 'ssb://' + msg.key + ' ' +
48 '@' + authorAbout.name + ' ' +
49 (repoAbout.name||''))
50 })
51 }, 8),
52 pull.log(sbot.close)
53 )
54 })
55 })
56 })
57}