Skip to content

Commit 7c5e7d0

Browse files
committed
Adds --overwrite-allow CLI option to allow overwriting only draft posts
1 parent 76daa52 commit 7c5e7d0

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

cli.js

+10
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ let { positionals, values } = parseArgs({
4343
type: "boolean",
4444
default: false,
4545
},
46+
"overwrite-allow": {
47+
type: "string",
48+
default: "",
49+
},
4650
cacheduration: {
4751
type: "string",
4852
default: "24h",
@@ -102,6 +106,9 @@ if(help) {
102106
# Allow overwriting existing files
103107
npx @11ty/import [type] [target] --overwrite
104108
109+
# Allow draft entries to overwrite existing files
110+
npx @11ty/import [type] [target] --overwrite-allow=drafts
111+
105112
# Change local fetch cache duration (default: 24h)
106113
npx @11ty/import [type] [target] --cacheduration=20m
107114
@@ -141,6 +148,7 @@ importer.setDraftsFolder("drafts");
141148
importer.setAssetsFolder("assets");
142149
importer.setAssetReferenceType(assetrefs);
143150

151+
// CSS selectors to preserve on markdown conversion
144152
if(preserve) {
145153
importer.addPreserved(preserve);
146154
}
@@ -149,6 +157,8 @@ if(persist) {
149157
importer.setPersistTarget(persist);
150158
}
151159

160+
importer.setOverwriteAllow(values['overwrite-allow']);
161+
152162
let entries = await importer.getEntries({
153163
contentType: format,
154164
within,

src/Importer.js

+16-3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class Importer {
3838
this.isVerbose = true;
3939
this.dryRun = false;
4040
this.safeMode = true;
41+
this.allowDraftsToOverwrite = false;
4142
this.counts = {
4243
files: 0
4344
};
@@ -54,6 +55,7 @@ class Importer {
5455
this.fetcher.setPersistManager(this.persistManager);
5556
}
5657

58+
// CSS selectors to preserve on markdown conversion
5759
addPreserved(selectors) {
5860
for(let sel of (selectors || "").split(",")) {
5961
this.markdownService.addPreservedSelector(sel);
@@ -69,6 +71,14 @@ class Importer {
6971
}
7072
}
7173

74+
// --overwrite--allow (independent of and bypasses --overwrite)
75+
setOverwriteAllow(overwrite = "") {
76+
let s = overwrite.split(",");
77+
if(s.includes("drafts")) {
78+
this.allowDraftsToOverwrite = true;
79+
}
80+
}
81+
7282
setSafeMode(safeMode) {
7383
this.safeMode = Boolean(safeMode);
7484

@@ -477,10 +487,13 @@ ${entry.content}`;
477487
// File system operations
478488
// TODO use https://www.npmjs.com/package/diff to compare file contents and skip
479489
if(this.safeMode && fs.existsSync(pathname)) {
480-
if(this.isVerbose) {
481-
Logger.skipping("post", pathname, entry.url);
490+
// Not a draft or drafts are skipped (via --overwrite-allow)
491+
if(entry.status !== "draft" || !this.allowDraftsToOverwrite) {
492+
if(this.isVerbose) {
493+
Logger.skipping("post", pathname, entry.url);
494+
}
495+
continue;
482496
}
483-
continue;
484497
}
485498

486499
if(this.isVerbose) {

0 commit comments

Comments
 (0)