archive folder supports links

This commit is contained in:
Jan Prochazka
2021-10-14 19:51:46 +02:00
parent 8f54a6b03d
commit 2e196178ab
12 changed files with 74 additions and 22 deletions

View File

@@ -71,6 +71,22 @@ function getPluginBackendPath(packageName) {
return path.join(pluginsdir(), packageName, 'dist', 'backend.js');
}
let archiveLinksCache = {};
function resolveArchiveFolder(folder) {
if (folder.endsWith('.link')) {
if (!archiveLinksCache[folder]) {
archiveLinksCache[folder] = fs.readFileSync(path.join(archivedir(), folder), 'utf-8');
}
return archiveLinksCache[folder];
}
return path.join(archivedir(), folder);
}
function clearArchiveLinksCache() {
archiveLinksCache = {};
}
module.exports = {
datadir,
jsldir,
@@ -83,4 +99,6 @@ module.exports = {
packagedPluginsDir,
packagedPluginList,
getPluginBackendPath,
resolveArchiveFolder,
clearArchiveLinksCache,
};

View File

@@ -1,10 +1,10 @@
const path = require('path');
const { jsldir, archivedir } = require('./directories');
const { jsldir, archivedir, resolveArchiveFolder } = require('./directories');
function getJslFileName(jslid) {
const archiveMatch = jslid.match(/^archive:\/\/([^/]+)\/(.*)$/);
if (archiveMatch) {
return path.join(archivedir(), archiveMatch[1], `${archiveMatch[2]}.jsonl`);
return path.join(resolveArchiveFolder(archiveMatch[1]), `${archiveMatch[2]}.jsonl`);
}
return path.join(jsldir(), `${jslid}.jsonl`);
}

View File

@@ -3,14 +3,12 @@ const path = require('path');
const yaml = require('js-yaml');
const { databaseInfoFromYamlModel, DatabaseAnalyser } = require('dbgate-tools');
const { startsWith } = require('lodash');
const { archivedir } = require('./directories');
const { archivedir, resolveArchiveFolder } = require('./directories');
async function importDbModel(inputDir) {
const files = [];
const dir = inputDir.startsWith('archive:')
? path.join(archivedir(), inputDir.substring('archive:'.length))
: inputDir;
const dir = inputDir.startsWith('archive:') ? resolveArchiveFolder(inputDir.substring('archive:'.length)) : inputDir;
for (const name of await fs.readdir(dir)) {
if (name.endsWith('.table.yaml') || name.endsWith('.sql')) {