Generate list of redirects

This commit is contained in:
Christoph Hagen
2025-01-06 10:45:48 +01:00
parent cb9af225f0
commit 48cfa204e2
3 changed files with 60 additions and 3 deletions

View File

@ -13,6 +13,7 @@ extension Content {
self.generateRequiredImages()
self.results.recalculate()
self.generateListOfExternalFiles()
self.generateListOfUrlMappings()
self.status("Generation completed")
}
}
@ -240,6 +241,10 @@ extension Content {
tag: tag)
let generator = PostListPageGenerator(source: source)
generator.createPages(for: posts)
if let originalUrl = tag.localized(in: language).originalUrl {
results.redirect(from: originalUrl, to: tag.absoluteUrl(in: language))
}
}
}
@ -274,11 +279,16 @@ extension Content {
return
}
let path = page.absoluteUrl(in: language) + ".html"
guard storage.write(content, to: path) else {
let pageUrl = page.absoluteUrl(in: language)
let filePath = pageUrl + ".html"
guard storage.write(content, to: filePath) else {
print("Failed to save page \(page.id)")
return
}
if let originalUrl = page.localized(in: language).originalUrl {
results.redirect(from: originalUrl, to: pageUrl)
}
}
// MARK: Additional infos
@ -303,4 +313,27 @@ extension Content {
storage.write(content, to: externalFileListName)
}
private var redirectsListFileName: String { "redirects.txt" }
private func generateListOfUrlMappings() {
let redirects = results.redirects.map { "\($0.key) \($0.value);" }
guard !redirects.isEmpty else {
if storage.hasFileInOutputFolder(redirectsListFileName) {
storage.deleteInOutputFolder(redirectsListFileName)
}
return
}
let list = redirects.sorted().joined(separator: "\n ")
let content =
"""
map $request_uri $redirect_uri {
\(list)
}
"""
storage.write(content, to: redirectsListFileName)
}
}