#!/bin/sh ':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@" // http://unix.stackexchange.com/questions/65235/universal-node-js-shebang // vi: ft=javascript var ref = require('ssb-ref') var toPull = require('stream-to-pull-stream') var pull = require('pull-stream') var path = require('path') function die() { console.error.apply(console, arguments) process.exit(1) } var args = process.argv.slice(2) if (args.length < 2) die('Usage: git-remote-ssb ') var m = args[1].match(/^ssb:(?:\/\/)?(.*)$/) || args var repoId = m[1] if (!ref.isMsgId(repoId)) die('Invalid message ID \'' + repoId + '\'') var appName = 'ssb_appname' in process.env ? process.env.ssb_appname : require('child_process').spawnSync('git', ['config', 'ssb.appname'], {encoding: 'utf8'}).stdout.trim() var confOverride = {} // ssb_path used for testing purposes if (process.env.ssb_path) confOverride.path = process.env.ssb_path var ssbConfig = require('ssb-config/inject')(appName, confOverride) // make port a number. needed for the tests ssbConfig.port = +ssbConfig.port var keys = require('ssb-keys') .loadOrCreateSync(path.join(ssbConfig.path, 'secret')) require('ssb-client')(keys, ssbConfig, function (err, sbot) { if (err) throw err require('ssb-git-repo').getRepo(sbot, repoId, { output: process.stderr }, function (err, repo) { if (err) { if (err.name == 'NotFoundError') die('Repo not found with ID', repoId) else throw err } pull( toPull(process.stdin), require('pull-git-remote-helper')(repo), toPull(process.stdout, function (err) { if (err) throw err repo.close() sbot.close(null, function (err) { if (err) throw err }) }) ) }) })