aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRuben Beltran del Rio <ruben@unlimited.pizza>2022-12-08 23:29:21 +0100
committerRuben Beltran del Rio <ruben@unlimited.pizza>2022-12-08 23:29:21 +0100
commit24de2f063e5dfcad0086d1dc81de3cf012a00e4c (patch)
tree30a9d0d8cc719213dc113a95d7fc31da425636c2 /lib
parent65d379f5db381423165e0da8cc788f85112873b8 (diff)
Assorted fixes
Apparently I only checked edge cases?
Diffstat (limited to 'lib')
-rw-r--r--lib/blog.js39
-rw-r--r--lib/generators/static.js2
2 files changed, 17 insertions, 24 deletions
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}`);