Check for unused files in output folder

This commit is contained in:
Christoph Hagen
2025-02-16 14:53:00 +01:00
parent 2cad27b504
commit 6b6db702f1
9 changed files with 95 additions and 7 deletions

View File

@ -47,7 +47,9 @@ struct ImageVersion {
}
func wasNowGenerated() {
image.generatedImageVersions.insert(versionId)
DispatchQueue.main.async {
image.generatedImageVersions.insert(versionId)
}
}
}

View File

@ -1,3 +1,5 @@
import Foundation
final class PageGenerator {
private let content: Content
@ -50,7 +52,8 @@ final class PageGenerator {
url: tag.absoluteUrl(in: language))
}
let headers = makeHeaders(requiredItems: results.requiredHeaders, results: results)
let requiredHeaders = DispatchQueue.main.sync { results.requiredHeaders }
let headers = makeHeaders(requiredItems: requiredHeaders, results: results)
results.require(files: headers.compactMap { $0.requiredFile })
let iconUrl = content.settings.navigation.localized(in: language).rootUrl
@ -60,6 +63,7 @@ final class PageGenerator {
url: languageUrl)
let imageUrl = localized.linkPreview.image?.linkPreviewImage(results: results)
let icons = DispatchQueue.main.sync { results.requiredIcons }
let pageHeader = PageHeader(
language: language,
@ -71,11 +75,13 @@ final class PageGenerator {
languageButton: languageButton,
links: content.navigationBar(in: language),
headers: headers,
icons: results.requiredIcons)
icons: icons)
let footers = DispatchQueue.main.sync { results.requiredFooters }
let fullPage = GenericPage(
header: pageHeader,
additionalFooter: results.requiredFooters.sorted().joined()) { content in
additionalFooter: footers.sorted().joined()) { content in
content += "<article>"
if !localized.hideTitle {
if !page.hideDate {

View File

@ -46,6 +46,12 @@ final class GenerationResults: ObservableObject {
@Published
var emptyPages: Set<LocalizedPageId> = []
@Published
var outputFiles: Set<String> = []
@Published
var unusedFilesInOutput: Set<String> = []
/**
The url redirects to install to prevent broken links.
@ -114,6 +120,8 @@ final class GenerationResults: ObservableObject {
self.unsavedOutputFiles = []
self.emptyPages = []
self.redirects = [:]
self.outputFiles = []
self.unusedFilesInOutput = []
}
for result in cache.values {
result.reset()
@ -229,6 +237,15 @@ final class GenerationResults: ObservableObject {
func redirect(from originalUrl: String, to newUrl: String) {
update { self.redirects[originalUrl] = newUrl }
}
func created(outputFile: String) {
update { self.outputFiles.insert(outputFile.withLeadingSlashRemoved) }
}
func determineFiles(unusedIn existingFiles: Set<String>) {
let unused = existingFiles.subtracting(outputFiles)
update { self.unusedFilesInOutput = unused }
}
}
private extension Dictionary where Value == Set<LocalizedItemId> {