/
index.js
53 lines (43 loc) · 1.07 KB
/
index.js
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
module.exports = load_odb
var path = require('path')
, ls = require('ls-stream')
function load_odb(fs, dir, find_oid, backends, ready) {
var pending_backends = []
ls(fs, path.join(dir, 'objects'))
.on('data', ondata)
.on('end', onend)
function ondata(entry) {
for(var i = 0, len = backends.length; i < len; ++i) {
if(backends[i].accept(entry.path)) {
pending_backends[pending_backends.length] = {
original: entry
, backend: backends[i]
}
break
}
}
}
function onend() {
var pending = pending_backends.length
, out = []
if(!pending) {
return ready(null, [])
}
for(var i = 0, len = pending; i < len; ++i) {
entry(i)
}
return
function entry(idx) {
pending_backends[idx].backend(pending_backends[idx].original, fs, find_oid, done)
function done(err, backend) {
if(err) {
ready(err)
ready = function() { }
return
}
out[idx] = backend
!--pending && ready(null, out)
}
}
}
}