Forwarded: https://lore.kernel.org/lkml/
20190825131329.naqzd5kwg7mw5d3f@decadent.org.uk/T/#u
jevents.py enumerates files and outputs the corresponding C structs in
the order they are found. This makes it sensitive to directory
ordering, so that the perf executable is not reproducible.
To avoid this, sort the entries returned by os.scandir() before
processing them.
References: https://tests.reproducible-builds.org/debian/dbdtxt/bullseye/i386/linux_4.19.37-6.diffoscope.txt.gz
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Gbp-Pq: Topic bugfix/all
Gbp-Pq: Name tools-perf-pmu-events-fix-reproducibility.patch
def ftw(path: str, parents: Sequence[str],
action: Callable[[Sequence[str], os.DirEntry], None]) -> None:
"""Replicate the directory/file walking behavior of C's file tree walk."""
- for item in os.scandir(path):
+ for item in sorted(os.scandir(path), key=(lambda item: item.name)):
action(parents, item)
if item.is_dir():
ftw(item.path, parents + [item.name], action)