Son CV dans un terminal web en Javascript!
https://terminal-cv.gregandev.fr
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.7 KiB
47 lines
1.7 KiB
1 year ago
|
const { renameSync, unlinkSync } = require('fs')
|
||
|
const { extname } = require('path')
|
||
|
|
||
|
exports.upgrade = function(path, options, open) {
|
||
|
let upgradeModule
|
||
|
try {
|
||
|
upgradeModule = require('lmdb-store-0.9')
|
||
|
} catch (error) {
|
||
|
throw new Error('And invalid file format was encountered in the database, if you have an older database, you need to install package lmdb-store-0.9 to upgrade')
|
||
|
}
|
||
|
let { open: legacyOpen, Cursor: legacyCursor } = upgradeModule
|
||
|
let filePath = extname(path) ? path : path + '/data.mdb'
|
||
|
console.log('Upgrading', filePath, 'to LMDB 1.0 format')
|
||
|
let tempPath = filePath.replace(/([^\\\/]+)$/, 'temp-$1')
|
||
|
let maxDbs = options.maxDbs || 20
|
||
|
let sourceStore = legacyOpen(path, { maxDbs, encoding: 'binary' })
|
||
|
let targetStore = open(tempPath, { maxDbs, encoding: 'binary', mapSize: sourceStore.env.info().mapSize })
|
||
|
let targetTxn = targetStore.transaction(() => {
|
||
|
copyDB(sourceStore, targetStore)
|
||
|
function copyDB(sourceStore, targetStore) {
|
||
|
let sourceTxn = sourceStore.env.beginTxn({ readOnly: true })
|
||
|
let sourceDb = sourceStore.db
|
||
|
let cursor = new legacyCursor(sourceTxn, sourceDb)
|
||
|
let currentKey = cursor.goToFirst()
|
||
|
while(currentKey) {
|
||
|
let size = cursor.getCurrentBinaryUnsafe()
|
||
|
if (cursor.getCurrentIsDatabase()) {
|
||
|
copyDB(sourceStore.openDB(currentKey, {}), targetStore.openDB(currentKey))
|
||
|
} else {
|
||
|
targetStore.putSync(currentKey, sourceDb.unsafeBuffer.slice(0, size))
|
||
|
}
|
||
|
currentKey = cursor.goToNext()
|
||
|
}
|
||
|
cursor.close()
|
||
|
sourceTxn.abort()
|
||
|
}
|
||
|
})
|
||
|
sourceStore.close()
|
||
|
targetStore.close()
|
||
|
unlinkSync(filePath)
|
||
|
renameSync(tempPath, filePath)
|
||
|
try {
|
||
|
unlinkSync(tempPath + '-lock')
|
||
|
} catch (error) {}
|
||
|
console.log('Finished upgrading', filePath)
|
||
|
}
|