@jimpick/dat-next
Version:
Dat is the package manager for data. Easily share and version control data.
74 lines (67 loc) • 2.04 kB
JavaScript
module.exports = {
name: 'share',
command: share,
help: [
'Create and share a dat',
'Create a dat, import files, and share to the network.',
'',
'Usage: dat share'
].join('\n'),
options: [
{
name: 'import',
boolean: true,
default: true,
help: 'Import files from the directory to the database.'
},
{
name: 'ignoreHidden',
boolean: true,
default: true,
abbr: 'ignore-hidden'
},
{
name: 'watch',
boolean: true,
default: true,
help: 'Watch for changes and import updated files.'
},
{
name: 'staging-new-format',
alias: ['new'],
boolean: true,
default: false,
help: 'experimental multiwriter support'
}
]
}
function share (opts) {
var Dat = require('@jimpick/dat-node')
var neatLog = require('neat-log')
var archiveUI = require('../ui/archive')
var trackArchive = require('../lib/archive')
var onExit = require('../lib/exit')
var parseArgs = require('../parse-args')
var debug = require('debug')('dat')
if (!opts.dir) {
opts.dir = parseArgs(opts).dir || process.cwd()
}
opts.stagingNewFormat = opts['staging-new-format']
debug('Sharing archive', opts)
var views = [archiveUI]
var neat = neatLog(views, { logspeed: opts.logspeed, quiet: opts.quiet, debug: opts.debug })
neat.use(trackArchive)
neat.use(onExit)
neat.use(function (state, bus) {
state.opts = opts
Dat(opts.dir, opts, function (err, dat) {
if (dat.archive.db) state.opts.stagingNewFormat = true
if (err && err.name === 'IncompatibleError') return bus.emit('exit:warn', 'Directory contains incompatible dat metadata. Please remove your old .dat folder (rm -rf .dat)')
else if (err) return bus.emit('exit:error', err)
if (!dat.writable && !opts.shortcut) return bus.emit('exit:warn', 'Archive not writable, cannot use share. Please use sync to resume download.')
state.dat = dat
bus.emit('dat')
bus.emit('render')
})
})
}