aboutsummaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rwxr-xr-xutils/guard_operation.sh16
-rwxr-xr-xutils/guard_path.sh60
-rwxr-xr-xutils/patch.awk4
3 files changed, 78 insertions, 2 deletions
diff --git a/utils/guard_operation.sh b/utils/guard_operation.sh
new file mode 100755
index 0000000..1e7f1ed
--- /dev/null
+++ b/utils/guard_operation.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+
+# Guard an operation with a confirmation prompt.
+
+main() {
+ if [ -t 1 ]; then
+ confirmation_prompt="${1:-"Are you sure you want to continue?"}"
+ read -r -p "$confirmation_prompt [Y/n] " ans
+ if [[ "$ans" == "N" || "$ans" == "n" ]]; then
+ echo "error: aborted!" 2>&1
+ exit 1
+ fi
+ fi
+}
+
+main "$@"
diff --git a/utils/guard_path.sh b/utils/guard_path.sh
new file mode 100755
index 0000000..6de9cd8
--- /dev/null
+++ b/utils/guard_path.sh
@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+
+main() {
+ if [[ "$#" -ne 2 ]]; then
+ echo "Usage: guard_path.sh <path> <confirmation_prompt>" >&2
+ exit 1
+ fi
+ if [ -t 1 ]; then
+ path="$(_to_realpath "$1")"
+ confirmation_prompt="$2"
+ if [[ ! "$path" == "$(pwd)"* ]]; then
+ read -r -p "$confirmation_prompt [Y/n] " ans
+ if [[ "$ans" == "N" || "$ans" == "n" ]]; then
+ echo "error: aborted!" >&2
+ exit 1
+ fi
+ fi
+ fi
+}
+
+_to_realpath() {
+ path="$1"
+ if [[ $OS == "Windows_NT" ]]; then
+ path="$(cygpath -u "$path")"
+ fi
+ awk -v path="$path" -v pwd="$PWD" '
+BEGIN {
+ if (path !~ /^\//) {
+ path = pwd "/" path
+ }
+ if (path ~ /\/\.{1,2}?$/) {
+ isDir = 1
+ }
+ split(path, parts, "/")
+ newPartsLength = 0
+ for (i = 1; i <= length(parts); i++) {
+ part = parts[i]
+ if (part == "..") {
+ if (newPartsLength > 0) {
+ delete newParts[newPartsLength--]
+ }
+ } else if (part != "." && part != "") {
+ newParts[++newPartsLength] = part
+ }
+ }
+ if (isDir == 1 || newPartsLength == 0) {
+ newParts[++newPartsLength] = ""
+ }
+ printf "/"
+ for (i = 1; i <= newPartsLength; i++) {
+ newPart = newParts[i]
+ printf newPart
+ if (i < newPartsLength) {
+ printf "/"
+ }
+ }
+}'
+}
+
+main "$@"
diff --git a/utils/patch.awk b/utils/patch.awk
index b625d37..b651fb2 100755
--- a/utils/patch.awk
+++ b/utils/patch.awk
@@ -55,7 +55,7 @@ END {
}
if (hunkIndex == 0) {
- print "No patch" > "/dev/stderr"
+ print "error: no patch" > "/dev/stderr"
exit 1
}
@@ -90,7 +90,7 @@ END {
}
if (hunkIndex != totalHunks + 1) {
- print "Failed to patch the file" > "/dev/stderr"
+ print "error: unable to apply patch" > "/dev/stderr"
exit 1
}
}