From f4ece68ecf8cfc855e54f2d5935ed2a2b8b0c4af Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Sun, 4 Dec 2022 11:27:44 +0100 Subject: Add file_rhash utility --- CHANGELOG.md | 5 +++++ lib/util.bash | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e31930f..9e5c2cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 GNU+Linux distributions. - The `$BASHTARD_PLATFORM` variable now contains an additional entry, `init`, to allow for handling different init systems on GNU+Linux in a cleaner fashion. +- A `file_rhash` utility function has been added, which will give you a hash based + on the file contents of a directory. This function will find files + recursively, calculate a hash for each of them, and then calculate a hash + based on the total result. The intended goal is to allow running before and + after templating some files, to deduce whether something actually changed. ### Changed diff --git a/lib/util.bash b/lib/util.bash index 6ad69e1..604e3e5 100644 --- a/lib/util.bash +++ b/lib/util.bash @@ -130,6 +130,16 @@ join_args() { printf "%s" "$*" } +# Recursively hash files in a directory, and hashing the output of all those +# hashes again. This results in a single hash representing the state of files +# in a directory. It can be used to check whether contents changed after +# templating files in a given directory. +file_rhash() { + find "$1" -type f -exec sha1sum {} \; \ + | sha1sum \ + | awk '{ print $1 }' +} + file_template() { local file="$BASHTARD_ETCDIR/playbooks.d/$BASHTARD_PLAYBOOK/share/$1" ; shift -- cgit v1.2.3