Skip to content
This repository was archived by the owner on Mar 23, 2023. It is now read-only.

Commit e7c8f25

Browse files
authored
fix: Windows support (#7)
* fix: Windows support * chore: update CI and deps * another circle * chore(package): dev dependencies closes #6 * chore: standard coding style * chore: fix lint errors * Revert "chore: fix lint errors" This reverts commit 71a9536. * chore: more lint issues
1 parent 1507a6b commit e7c8f25

File tree

6 files changed

+81
-50
lines changed

6 files changed

+81
-50
lines changed

.appveyor.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
environment:
2+
matrix:
3+
- nodejs_version: "6"
4+
- nodejs_version: "8"
5+
6+
# cache:
7+
# - node_modules
8+
9+
platform:
10+
- x64
11+
12+
install:
13+
- ps: Install-Product node $env:nodejs_version $env:platform
14+
- npm install
15+
16+
test_script:
17+
- node --version
18+
- npm --version
19+
- npm test
20+
21+
build: off
22+
23+
version: "{build}"

.travis.yml

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,26 @@ language: node_js
33

44
matrix:
55
include:
6-
- node_js: 4
7-
env: CXX=g++-4.8
86
- node_js: 6
9-
env:
10-
- SAUCE=true
11-
- CXX=g++-4.8
12-
- node_js: stable
137
env: CXX=g++-4.8
8+
- node_js: 8
9+
env: CXX=g++-4.8
10+
# - node_js: stable
11+
# env: CXX=g++-4.8
1412

1513
script:
1614
- npm run lint
17-
- npm run flow
18-
- npm test
15+
- npm run test
16+
- npm run coverage
17+
- make test
1918

2019
before_script:
2120
- export DISPLAY=:99.0
2221
- sh -e /etc/init.d/xvfb start
2322

23+
after_success:
24+
- npm run coverage-publish
25+
2426
addons:
2527
firefox: 'latest'
2628
apt:

circle.yml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@ machine:
22
node:
33
version: stable
44

5+
test:
6+
post:
7+
- npm run coverage -- --upload
8+
59
dependencies:
610
pre:
711
- google-chrome --version
8-
- wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
9-
- sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
12+
- curl -L -o google-chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
13+
- sudo dpkg -i google-chrome.deb || true
1014
- sudo apt-get update
11-
- sudo apt-get --only-upgrade install google-chrome-stable
15+
- sudo apt-get install -f
16+
- sudo apt-get install --only-upgrade lsb-base
17+
- sudo dpkg -i google-chrome.deb
1218
- google-chrome --version

package.json

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
"description": "Datastore implementation with file system backend",
55
"main": "src/index.js",
66
"scripts": {
7-
"lint": "aegir-lint",
8-
"test": "aegir-test --env node",
7+
"lint": "aegir lint",
8+
"test": "aegir test --target node",
99
"flow": "flow",
10-
"release": "aegir-release --env node --docs",
11-
"release-minor": "aegir-release --type minor --env node --docs",
12-
"release-major": "aegir-release --type major --env node --docs",
13-
"coverage": "aegir-coverage",
14-
"coverage-publish": "aegir-coverage publish",
15-
"docs": "aegir-docs"
10+
"release": "aegir release --target node --docs",
11+
"release-minor": "aegir release --type minor --target node --docs",
12+
"release-major": "aegir release --type major --target node --docs",
13+
"coverage": "aegir coverage",
14+
"coverage-publish": "aegir coverage --provider coveralls",
15+
"docs": "aegir docs"
1616
},
1717
"repository": {
1818
"type": "git",
@@ -32,27 +32,27 @@
3232
},
3333
"homepage": "https://github.com/ipfs/js-datastore-fs#readme",
3434
"dependencies": {
35-
"datastore-core": "^0.3.0",
35+
"datastore-core": "github:ipfs/js-datastore-core#windows-interop",
36+
"glob": "^7.1.2",
3637
"graceful-fs": "^4.1.11",
37-
"interface-datastore": "^0.3.0",
38-
"level-js": "^2.2.4",
39-
"leveldown": "^1.7.2",
40-
"levelup": "^1.3.8",
38+
"interface-datastore": "^0.4.0",
4139
"mkdirp": "^0.5.1",
42-
"pull-glob": "^1.0.6",
43-
"pull-stream": "^3.6.0",
44-
"write-file-atomic": "^2.1.0"
40+
"pull-stream": "^3.6.1",
41+
"write-file-atomic": "^2.3.0"
4542
},
4643
"devDependencies": {
47-
"aegir": "^11.0.2",
44+
"aegir": "^12.1.3",
4845
"async": "^2.5.0",
49-
"chai": "^4.1.0",
50-
"cids": "^0.5.1",
46+
"chai": "^4.1.2",
47+
"cids": "~0.5.2",
5148
"dirty-chai": "^2.0.1",
52-
"flow-bin": "^0.51.0",
49+
"flow-bin": "^0.58.0",
5350
"flow-typed": "^2.2.3",
54-
"memdown": "^1.2.4",
55-
"rimraf": "^2.6.1"
51+
"level-js": "^2.2.4",
52+
"leveldown": "^2.0.0",
53+
"levelup": "^2.0.0",
54+
"memdown": "^1.4.1",
55+
"rimraf": "^2.6.2"
5656
},
5757
"contributors": [
5858
"David Dias <[email protected]>",

src/index.js

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
const fs = require('graceful-fs')
77
const pull = require('pull-stream')
8-
const glob = require('pull-glob')
8+
const glob = require('glob')
99
const setImmediate = require('async/setImmediate')
1010
const waterfall = require('async/series')
1111
const each = require('async/each')
@@ -136,7 +136,11 @@ class FsDatastore {
136136
throw new Error(`Invalid extension: ${path.extname(file)}`)
137137
}
138138

139-
return new Key(file.slice(this.path.length, -ext.length))
139+
const keyname = file
140+
.slice(this.path.length, -ext.length)
141+
.split(path.sep)
142+
.join('/')
143+
return new Key(keyname)
140144
}
141145

142146
/**
@@ -259,7 +263,13 @@ class FsDatastore {
259263
* @returns {PullStream}
260264
*/
261265
query (q /* : Query<Buffer> */) /* : QueryResult<Buffer> */ {
262-
let tasks = [glob(path.join(this.path, '**', '*' + this.opts.extension))]
266+
// glob expects a POSIX path
267+
let prefix = q.prefix || '**'
268+
let pattern = path
269+
.join(this.path, prefix, '*' + this.opts.extension)
270+
.split(path.sep)
271+
.join('/')
272+
let tasks = [pull.values(glob.sync(pattern))]
263273

264274
if (!q.keysOnly) {
265275
tasks.push(pull.asyncMap((f, cb) => {
@@ -277,21 +287,12 @@ class FsDatastore {
277287
tasks.push(pull.map(f => ({ key: this._decode(f) })))
278288
}
279289

280-
let filters = []
281-
282-
if (q.prefix != null) {
283-
const prefix = q.prefix
284-
filters.push((e, cb) => cb(null, e.key.toString().startsWith(prefix)))
285-
}
286-
287290
if (q.filters != null) {
288-
filters = filters.concat(q.filters)
291+
tasks = tasks.concat(q.filters.map(asyncFilter))
289292
}
290293

291-
tasks = tasks.concat(filters.map(f => asyncFilter(f)))
292-
293294
if (q.orders != null) {
294-
tasks = tasks.concat(q.orders.map(o => asyncSort(o)))
295+
tasks = tasks.concat(q.orders.map(asyncSort))
295296
}
296297

297298
if (q.offset != null) {

test/index.spec.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ describe('FsDatastore', () => {
9191
})
9292

9393
it('query', (done) => {
94-
const fs = new FsStore(path.join(__dirname, 'test-repo/blocks'))
94+
const fs = new FsStore(path.join(__dirname, 'test-repo', 'blocks'))
9595

9696
pull(
9797
fs.query({}),
@@ -140,8 +140,7 @@ describe('FsDatastore', () => {
140140
})
141141
})
142142

143-
// TODO: depends on sharding query fix
144-
describe.skip('interface-datastore (sharding(fs))', () => {
143+
describe('interface-datastore (sharding(fs))', () => {
145144
const dir = utils.tmpdir()
146145

147146
require('interface-datastore/src/tests')({

0 commit comments

Comments
 (0)