From: Ruben Beltran del Rio Date: Thu, 8 Dec 2022 22:29:21 +0000 (+0100) Subject: Assorted fixes X-Git-Tag: 5.0.0~16 X-Git-Url: https://git.r.bdr.sh/rbdr/blog/commitdiff_plain/24de2f063e5dfcad0086d1dc81de3cf012a00e4c?ds=sidebyside;hp=65d379f5db381423165e0da8cc788f85112873b8 Assorted fixes Apparently I only checked edge cases? --- diff --git a/lib/blog.js b/lib/blog.js index ff52554..6b831f7 100644 --- a/lib/blog.js +++ b/lib/blog.js @@ -3,7 +3,7 @@ const { access, mkdir, readdir, readFile, rm, writeFile } = require('fs/promises'); const { exec } = require('child_process'); const { ncp } = require('ncp'); -const { resolve, join } = require('path'); +const { basename, resolve, join } = require('path'); const ParseGemini = require('gemini-to-html/parse'); const RenderGemini = require('gemini-to-html/render'); const { debuglog, promisify } = require('util'); @@ -70,7 +70,7 @@ module.exports = class Blog { await this._ensurePostsDirectoryExists(); await this._shift(); - await mkdir(join(this.postsDirectory, '0')); + await this._ensurePostsDirectoryExists(join(this.postsDirectory, '0')); await this.update(postLocation); } @@ -228,14 +228,13 @@ module.exports = class Blog { async _shift() { - for (let i = this.maxPosts - 1; i >= 0; --i) { + for (let i = this.maxPosts - 1; i >= 1; --i) { const targetPath = join(this.postsDirectory, `${i}`); const sourcePath = join(this.postsDirectory, `${i - 1}`); try { internals.debuglog(`Archiving ${targetPath}`); - await rm(targetPath, { recursive: true }); - + await rm(targetPath, { recursive: true, force: true }); await access(sourcePath); // check the source path internals.debuglog(`Shifting blog post ${sourcePath} to ${targetPath}`); @@ -267,6 +266,7 @@ module.exports = class Blog { } finally { internals.debuglog(`Adding ${post.location} to ${targetPath}`); + await this._ensureDirectoryExists(targetPath); await internals.ncp(post.location, targetPath); internals.debuglog(`Added ${post.location} to ${targetPath}`); } @@ -309,12 +309,18 @@ module.exports = class Blog { async _copyPost(postLocation) { const targetPath = join(this.postsDirectory, '0'); + const postName = basename(postLocation); + const targetPost = join(targetPath, postName); internals.debuglog(`Removing ${targetPath}`); - await rm(targetPath, { recursive: true }); - - internals.debuglog(`Adding ${postLocation} to ${targetPath}`); - await internals.ncp(postLocation, targetPath); + try { + await rm(targetPath, { recursive: true }); + } + finally { + await this._ensureDirectoryExists(targetPath); + internals.debuglog(`Adding ${postLocation} to ${targetPost}`); + await internals.ncp(postLocation, targetPost); + } } // Ensures a directory exists. @@ -327,7 +333,7 @@ module.exports = class Blog { } catch (error) { if (error.code === internals.kFileNotFoundError) { - internals.debuglog('Creating posts directory'); + internals.debuglog(`Creating ${directory}`); await mkdir(directory); return; } @@ -341,19 +347,6 @@ module.exports = class Blog { async _ensurePostsDirectoryExists() { return this._ensureDirectoryExists(this.postsDirectory); - internals.debuglog(`Checking if ${this.postsDirectory} exists.`); - try { - await access(this.postsDirectory); - } - catch (error) { - if (error.code === internals.kFileNotFoundError) { - internals.debuglog('Creating posts directory'); - await mkdir(this.postsDirectory); - return; - } - - throw error; - } } // Looks for a `.gmi` file in the blog directory, and returns the path diff --git a/lib/generators/static.js b/lib/generators/static.js index a0856a3..4713ea7 100644 --- a/lib/generators/static.js +++ b/lib/generators/static.js @@ -25,7 +25,7 @@ module.exports = async function StaticGenerator(source, target, posts) { const assetsTarget = join(target, internals.kAssetsDirectoryName); internals.debuglog(`Removing ${assetsTarget}`); - await rm(assetsTarget, { recursive: true }); + await rm(assetsTarget, { recursive: true, force: true }); for (let i = 0; i < posts.length; ++i) { const postSourcePath = join(source, `${i}`);