aboutsummaryrefslogtreecommitdiff
path: root/aux/lib.sh
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2021-07-15 14:56:58 -0300
committerEuAndreh <eu@euandre.org>2021-07-15 15:22:12 -0300
commit42354876de823f52a431eac900d360c074c6198d (patch)
tree0b640a85a4375d51c01b9f05937eb562e776a5bf /aux/lib.sh
parentTODOs.md: Add #task-f4807694-2187-5cb5-115e-c5970a052f1f (diff)
downloadgit-permalink-42354876de823f52a431eac900d360c074c6198d.tar.gz
git-permalink-42354876de823f52a431eac900d360c074c6198d.tar.xz
aux/lib.sh: Add mkstemp and mkdtemp, and copy uuid over
The tests were relying on the unspecified and non-standartized behaviour of "mktemp". Now they use "mkstemp()", a shim sh function to provide the expected behaviour, and an accompanying "mkdtemp()" function is also defined. To further decouple from specific implementations and OS-behaviours and quirks, a aux/lib.sh file containing both those functions was added. Its purpose is to also allow code under aux/ to not depend on specific behaviour. "mkdtemp()" had to be replicated in aux/ci/ci-build.sh, since it runs outside the repository.
Diffstat (limited to 'aux/lib.sh')
-rwxr-xr-xaux/lib.sh30
1 files changed, 30 insertions, 0 deletions
diff --git a/aux/lib.sh b/aux/lib.sh
new file mode 100755
index 0000000..c31c4fb
--- /dev/null
+++ b/aux/lib.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+#
+# Generally, utilities that I expected to exist in POSIX, but don't.
+#
+
+uuid() {
+ # Taken from:
+ # https://serverfault.com/a/799198
+ od -xN20 /dev/urandom | \
+ head -1 | \
+ awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}'
+}
+
+tmpname() {
+ echo 'mkstemp(template)' | m4 -D template="${TMPDIR:-/tmp}/m4-tmpname."
+}
+
+mkstemp() {
+ name="$(tmpname)"
+ touch "$name"
+ echo "$name"
+}
+
+mkdtemp() {
+ name="$(tmpname)"
+ rm -f "$name"
+ mkdir "$name"
+ echo "$name"
+}