summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-05-10 08:25:12 -0300
committerEuAndreh <eu@euandre.org>2024-05-10 08:25:12 -0300
commitc5fbe36d5e71a94589039ad9bc422da543fddf01 (patch)
tree8d06f197e1b18c27d6446a21628abdb1cfa53fba /src
parentclock, minutes, round, statusf: Add working utilities (diff)
downloadeut-c5fbe36d5e71a94589039ad9bc422da543fddf01.tar.gz
eut-c5fbe36d5e71a94589039ad9bc422da543fddf01.tar.xz
src/ifnew: Add working utility
Diffstat (limited to 'src')
-rwxr-xr-xsrc/ifnew33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/ifnew b/src/ifnew
new file mode 100755
index 0000000..c293f63
--- /dev/null
+++ b/src/ifnew
@@ -0,0 +1,33 @@
+#!/bin/sh
+set -eu
+
+usage() {
+ cat <<-'EOF'
+ Usage:
+ ifnew [-v] FILE
+ EOF
+}
+
+MV_ARGS=''
+while getopts 'v' flag; do
+ case "$flag" in
+ (v)
+ MV_ARGS='-v'
+ ;;
+ (*)
+ usage >&2
+ exit 2
+ ;;
+ esac
+done
+shift $((OPTIND - 1))
+
+FILE="${1:-}"
+eval "$(assert-arg -- "$FILE" 'FILE')"
+
+
+STDIN="$FILE.$(uuid).tmp"
+trap 'rm -f "$STDIN"' EXIT
+
+cat - > "$STDIN"
+cmp -s "$STDIN" "$FILE" || mv $MV_ARGS "$STDIN" "$FILE"