Skip to content

Commit c73f9d2

Browse files
committed
feat: automatic reversion of repo
1 parent 5657037 commit c73f9d2

File tree

3 files changed

+22
-20
lines changed

3 files changed

+22
-20
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
"err-code": "^1.1.2",
6666
"interface-datastore": "~0.7.0",
6767
"ipfs-block": "~0.8.1",
68-
"ipfs-repo-migrations": "ipfs/js-ipfs-repo-migrations#master",
68+
"ipfs-repo-migrations": "github:ipfs/js-ipfs-repo-migrations#master",
6969
"just-safe-get": "^1.3.0",
7070
"just-safe-set": "^2.1.0",
7171
"lodash.has": "^4.5.2",

src/index.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,11 +294,12 @@ class IpfsRepo {
294294
const currentRepoVersion = await this.version.get()
295295

296296
if (currentRepoVersion > toVersion) {
297-
throw new ERRORS.InvalidRepoVersionError('Your repo\'s version is higher then this version of js-ipfs-repo require! You have to revert it.')
297+
log('reverting to version ' + toVersion)
298+
return migrator.revert(this.path, toVersion, { ignoreLock: true, repoOptions: this.options })
299+
} else {
300+
log('migrating to version ' + toVersion)
301+
return migrator.migrate(this.path, toVersion, { ignoreLock: true, repoOptions: this.options })
298302
}
299-
300-
log('migrating to version ' + toVersion)
301-
return migrator.migrate(this.path, { toVersion: toVersion, ignoreLock: true, repoOptions: this.options })
302303
}
303304

304305
async _storageMaxStat () {

test/migrations-test.js

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,21 @@ module.exports = (createTempRepo) => {
1717
describe('Migrations tests', () => {
1818
let repo
1919
let migrateStub
20+
let revertStub
2021
let repoVersionStub
2122
let getLatestMigrationVersionStub
2223

2324
before(() => {
2425
repoVersionStub = sinon.stub(constants, 'repoVersion')
2526
migrateStub = sinon.stub(migrator, 'migrate')
27+
revertStub = sinon.stub(migrator, 'revert')
2628
getLatestMigrationVersionStub = sinon.stub(migrator, 'getLatestMigrationVersion')
2729
})
2830

2931
after(() => {
3032
repoVersionStub.restore()
3133
migrateStub.restore()
34+
revertStub.restore()
3235
getLatestMigrationVersionStub.restore()
3336
})
3437

@@ -67,9 +70,9 @@ module.exports = (createTempRepo) => {
6770
expect(migrateStub.called).to.be.false()
6871
try {
6972
await newRepo.open()
70-
throw Error('Should throw error')
71-
} catch (e) {
72-
expect(e.code).to.equal(errors.InvalidRepoVersionError.code)
73+
expect.fail('should have thrown error')
74+
} catch (err) {
75+
expect(err.code).to.equal(errors.InvalidRepoVersionError.code)
7376
}
7477

7578
expect(migrateStub.called).to.be.false()
@@ -87,10 +90,10 @@ module.exports = (createTempRepo) => {
8790
expect(migrateStub.called).to.be.false()
8891
try {
8992
await repo.open()
90-
throw Error('Should throw error')
91-
} catch (e) {
93+
expect.fail('should have thrown error')
94+
} catch (err) {
9295
expect(migrateStub.called).to.be.false()
93-
expect(e.code).to.equal(errors.InvalidRepoVersionError.code)
96+
expect(err.code).to.equal(errors.InvalidRepoVersionError.code)
9497
}
9598
})
9699

@@ -108,23 +111,21 @@ module.exports = (createTempRepo) => {
108111
expect(migrateStub.called).to.be.false()
109112
})
110113

111-
it('should not migrate when current repo versions is higher then expected', async () => {
112-
migrateStub.resolves()
114+
it('should revert when current repo versions is higher then expected', async () => {
115+
revertStub.resolves()
113116
repoVersionStub.value(8)
114117

118+
expect(revertStub.called).to.be.false()
119+
115120
await repo.version.set(9)
116121
await repo.close()
117122

118123
expect(migrateStub.called).to.be.false()
124+
expect(revertStub.called).to.be.false()
119125

120-
try {
121-
await repo.open()
122-
throw Error('Should throw error')
123-
} catch (e) {
124-
expect(migrateStub.called).to.be.false()
125-
expect(e.code).to.equal(errors.InvalidRepoVersionError.code)
126-
}
126+
await repo.open()
127127

128+
expect(revertStub.called).to.be.true()
128129
expect(migrateStub.called).to.be.false()
129130
})
130131
})

0 commit comments

Comments
 (0)