From a0a01ecd606d8b5173592d4e39f2a1d289c58a2f Mon Sep 17 00:00:00 2001 From: Hollow Man Date: Mon, 18 Aug 2025 13:49:12 +0300 Subject: [PATCH] Keep preprocessors/backends execution order deterministic There's a regression caused by recent refactor work, as it used to execute preprocessors/backends in a deterministic way, but now this is not the case, which causes trouble when some backends implicitly depend on the result from another backend and happen to work (e.g. mdbook-pdf). The root cause is that a HashMap has no order, so this PR switches this into `BTreeMap` instead. Signed-off-by: Hollow Man --- crates/mdbook-core/src/config.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/mdbook-core/src/config.rs b/crates/mdbook-core/src/config.rs index 1a49f02e..c53d03a3 100644 --- a/crates/mdbook-core/src/config.rs +++ b/crates/mdbook-core/src/config.rs @@ -48,7 +48,7 @@ use crate::utils::log_backtrace; use anyhow::{Context, Error, Result, bail}; use log::{debug, trace}; use serde::{Deserialize, Serialize}; -use std::collections::HashMap; +use std::collections::{BTreeMap, HashMap}; use std::env; use std::fs::File; use std::io::Read; @@ -214,7 +214,7 @@ impl Config { } /// Returns the configuration for all preprocessors. - pub fn preprocessors<'de, T: Deserialize<'de>>(&self) -> Result> { + pub fn preprocessors<'de, T: Deserialize<'de>>(&self) -> Result> { self.preprocessor .clone() .try_into() @@ -222,7 +222,7 @@ impl Config { } /// Returns the configuration for all renderers. - pub fn outputs<'de, T: Deserialize<'de>>(&self) -> Result> { + pub fn outputs<'de, T: Deserialize<'de>>(&self) -> Result> { self.output .clone() .try_into()