diff --git a/debian/patches/apertis/tsort-Switch-to-BTreeHash-and-BTreeSet.patch b/debian/patches/apertis/tsort-Switch-to-BTreeHash-and-BTreeSet.patch new file mode 100644 index 0000000000000000000000000000000000000000..323a5190b63fb2f5dac46197b755f0814f677b8e --- /dev/null +++ b/debian/patches/apertis/tsort-Switch-to-BTreeHash-and-BTreeSet.patch @@ -0,0 +1,51 @@ +From: Detlev Casanova <detlev.casanova@collabora.com> +Date: Fri, 2 Jun 2023 14:42:47 -0400 +Subject: tsort: Switch to BTreeHash and BTreeSet + +Using HashMap and HashSet give a valid topological sort, but the output +will change randomly at each run. + +BTree based structures will guarantee that the output is always ordered +in the same way. + +This also makes the ouptut similar to the output of the C version of the +tools, on which some applications rely. + +Forwarded: https://github.com/uutils/coreutils/pull/4931 +--- + src/uu/tsort/src/tsort.rs | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/uu/tsort/src/tsort.rs b/src/uu/tsort/src/tsort.rs +index 1ef8537..a0c149f 100644 +--- a/src/uu/tsort/src/tsort.rs ++++ b/src/uu/tsort/src/tsort.rs +@@ -6,7 +6,7 @@ + // * For the full copyright and license information, please view the LICENSE + // * file that was distributed with this source code. + use clap::{crate_version, Arg, Command}; +-use std::collections::{HashMap, HashSet}; ++use std::collections::{BTreeMap, BTreeSet}; + use std::fs::File; + use std::io::{stdin, BufRead, BufReader, Read}; + use std::path::Path; +@@ -105,8 +105,8 @@ pub fn uu_app() -> Command { + // but using integer may improve performance. + #[derive(Default)] + struct Graph { +- in_edges: HashMap<String, HashSet<String>>, +- out_edges: HashMap<String, Vec<String>>, ++ in_edges: BTreeMap<String, BTreeSet<String>>, ++ out_edges: BTreeMap<String, Vec<String>>, + result: Vec<String>, + } + +@@ -124,7 +124,7 @@ impl Graph { + } + + fn init_node(&mut self, n: &str) { +- self.in_edges.insert(n.to_string(), HashSet::new()); ++ self.in_edges.insert(n.to_string(), BTreeSet::new()); + self.out_edges.insert(n.to_string(), vec![]); + } + diff --git a/debian/patches/series b/debian/patches/series index a00f9b9170158f6e592ea4b5b88ba562d29113d2..88aadf7633035b0d2fc66c6f64112cabe51e8b1d 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -34,3 +34,4 @@ unbreak-s390x.patch # Apertis patches apertis/HACK-cp-mv-add-dummy-missing-arguments.patch apertis/Add-hack-for-missing-argument-to-mkdir.patch +apertis/tsort-Switch-to-BTreeHash-and-BTreeSet.patch