aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Spek <p.spek@tyil.nl>2022-12-04 11:27:44 +0100
committerPatrick Spek <p.spek@tyil.nl>2022-12-04 11:27:44 +0100
commitf4ece68ecf8cfc855e54f2d5935ed2a2b8b0c4af (patch)
tree9b043bcd1c8fc8390af14a82edebee9dfc7cc3c5
parent3fdeadf1f19f08995d610d0dc4cf7fb2893bd8f1 (diff)
downloadbashtard-f4ece68ecf8cfc855e54f2d5935ed2a2b8b0c4af.tar.gz
bashtard-f4ece68ecf8cfc855e54f2d5935ed2a2b8b0c4af.tar.bz2
Add file_rhash utilityHEADmaster
-rw-r--r--CHANGELOG.md5
-rw-r--r--lib/util.bash10
2 files changed, 15 insertions, 0 deletions
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