]> git.r.bdr.sh - rbdr/blog/commitdiff
Assorted fixes
authorRuben Beltran del Rio <redacted>
Thu, 8 Dec 2022 22:29:21 +0000 (23:29 +0100)
committerRuben Beltran del Rio <redacted>
Thu, 8 Dec 2022 22:29:21 +0000 (23:29 +0100)
Apparently I only checked edge cases?

lib/blog.js
lib/generators/static.js

index ff52554a07ed5faa44c817f4e12bceb35f7ee539..6b831f7448d3f75625f72a1cd96602a5d04d3cf3 100644 (file)
@@ -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
index a0856a37ad558eadf4bc74017822b1b7b8a0c681..4713ea7dca51c841fcd695d46c1a377c1643b714 100644 (file)
@@ -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}`);