aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/%HOME%/.bash_utils
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2016-10-06 20:45:23 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2016-10-06 20:45:23 +0300
commitf05d745f30dea9810c42b75c5f191e57a68fa74a (patch)
treec74cb48b870eb0cc01bee4e798ef4e32bad9c3a3 /%HOME%/.bash_utils
parentREADME update (diff)
downloadlinux-home-f05d745f30dea9810c42b75c5f191e57a68fa74a.tar.gz
linux-home-f05d745f30dea9810c42b75c5f191e57a68fa74a.zip
mustn't be a repository anymore
Diffstat (limited to '%HOME%/.bash_utils')
-rw-r--r--%HOME%/.bash_utils/cxx.sh118
-rw-r--r--%HOME%/.bash_utils/distr.sh29
-rw-r--r--%HOME%/.bash_utils/file.sh35
-rw-r--r--%HOME%/.bash_utils/git.sh102
-rw-r--r--%HOME%/.bash_utils/text.sh43
5 files changed, 327 insertions, 0 deletions
diff --git a/%HOME%/.bash_utils/cxx.sh b/%HOME%/.bash_utils/cxx.sh
new file mode 100644
index 0000000..527c120
--- /dev/null
+++ b/%HOME%/.bash_utils/cxx.sh
@@ -0,0 +1,118 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2016 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "Cygwin configuration files" project.
+# For details, see https://github.com/egor-tensin/cygwin-home.
+# Distributed under the MIT License.
+
+runc_flags=('-Wall' '-Wextra')
+
+runc() (
+ set -o errexit -o nounset -o pipefail
+
+ local -a c_flags=("${runc_flags[@]+"${runc_flags[@]}"}")
+ local -a src_files
+ local -a prog_flags
+
+ while [ "$#" -gt 0 ]; do
+ case "$1" in
+ -c|--c-flags)
+ if [ "$#" -le 1 ]; then
+ echo "${FUNCNAME[0]}: missing argument for parameter: $1" >&2
+ return 1
+ fi
+ shift
+ c_flags+=("$1")
+ shift
+ ;;
+
+ -h|--help)
+ echo "usage: ${FUNCNAME[0]} [-h|--help] [-c|--c-flags FLAG]... [--] [SRC_PATH]..."
+ return 0
+ ;;
+
+ --)
+ shift
+ break
+ ;;
+
+ *)
+ src_files+=("$( realpath "$1" )")
+ shift
+ ;;
+ esac
+ done
+
+ prog_flags=("$@")
+
+ local build_dir
+ build_dir="$( mktemp --directory )"
+
+ trap "$( printf 'popd > /dev/null && rm -rf %q' "$build_dir" )" 0
+ pushd "$build_dir" > /dev/null
+
+ local output_name
+ output_name="$( mktemp --tmpdir=. "${FUNCNAME[0]}XXX.exe" )"
+
+ gcc -o "$output_name" \
+ "${c_flags[@]+"${c_flags[@]}"}" \
+ "${src_files[@]+"${src_files[@]}"}"
+
+ "$output_name" "${prog_flags[@]+"${prog_flags[@]}"}"
+)
+
+runcxx_flags=('-Wall' '-Wextra' '-std=c++14')
+
+runcxx() (
+ set -o errexit -o nounset -o pipefail
+
+ local -a cxx_flags=("${runcxx_flags[@]+"${runcxx_flags[@]}"}")
+ local -a src_files
+ local -a prog_flags
+
+ while [ "$#" -gt 0 ]; do
+ case "$1" in
+ -c|--cxx-flags)
+ if [ "$#" -le 1 ]; then
+ echo "${FUNCNAME[0]}: missing argument for parameter: $1" >&2
+ return 1
+ fi
+ shift
+ cxx_flags+=("$1")
+ shift
+ ;;
+
+ -h|--help)
+ echo "usage: ${FUNCNAME[0]} [-h|--help] [-c|--cxx-flags FLAG]... [--] [SRC_PATH]..."
+ return 0
+ ;;
+
+ --)
+ shift
+ break
+ ;;
+
+ *)
+ src_files+=("$( realpath "$1" )")
+ shift
+ ;;
+ esac
+ done
+
+ prog_flags=("$@")
+
+ local build_dir
+ build_dir="$( mktemp --directory )"
+
+ trap "$( printf 'popd > /dev/null && rm -rf %q' "$build_dir" )" 0
+ pushd "$build_dir" > /dev/null
+
+ local output_name
+ output_name="$( mktemp --tmpdir=. "${FUNCNAME[0]}XXX.exe" )"
+
+ g++ -o "$output_name" \
+ "${cxx_flags[@]+"${cxx_flags[@]}"}" \
+ "${src_files[@]+"${src_files[@]}"}"
+
+ "$output_name" "${prog_flags[@]+"${prog_flags[@]}"}"
+)
diff --git a/%HOME%/.bash_utils/distr.sh b/%HOME%/.bash_utils/distr.sh
new file mode 100644
index 0000000..06d342a
--- /dev/null
+++ b/%HOME%/.bash_utils/distr.sh
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2016 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "Cygwin configuration files" project.
+# For details, see https://github.com/egor-tensin/cygwin-home.
+# Distributed under the MIT License.
+
+checksums_path='sha1sums.txt'
+
+update_checksums() {
+ sha1sum -- "$@" > "$checksums_path"
+}
+
+update_checksums_distr() (
+ set -o errexit -o nounset -o pipefail
+
+ local -a paths
+ local path
+
+ while IFS= read -d '' -r path; do
+ paths+=("$path")
+ done < <( find . -type f -\( -iname '*.exe' -o -iname '*.iso' -\) -print0 )
+
+ update_checksums "${paths[@]+"${paths[@]}"}"
+)
+
+verify_checksums() {
+ sha1sum --check "$checksums_path"
+}
diff --git a/%HOME%/.bash_utils/file.sh b/%HOME%/.bash_utils/file.sh
new file mode 100644
index 0000000..0321833
--- /dev/null
+++ b/%HOME%/.bash_utils/file.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2016 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "Cygwin configuration files" project.
+# For details, see https://github.com/egor-tensin/cygwin-home.
+# Distributed under the MIT License.
+
+swap_files() (
+ set -o errexit -o nounset -o pipefail
+
+ if [ "$#" -ne 2 ]; then
+ echo "usage: ${FUNCNAME[0]} PATH1 PATH2" >&2
+ return 1
+ fi
+
+ local path1="$1"
+ local path2="$2"
+
+ if [ ! -f "$path1" ]; then
+ echo "${FUNCNAME[0]}: must be a regular file: $path1" >&2
+ return 1
+ fi
+
+ if [ ! -f "$path2" ]; then
+ echo "${FUNCNAME[0]}: must be a regular file: $path2" >&2
+ return 1
+ fi
+
+ local tmp_path
+ tmp_path="$( mktemp "$( dirname "$path1" )/XXX" )"
+
+ mv "$path1" "$tmp_path"
+ mv "$path2" "$path1"
+ mv "$tmp_path" "$path2"
+)
diff --git a/%HOME%/.bash_utils/git.sh b/%HOME%/.bash_utils/git.sh
new file mode 100644
index 0000000..54e50f6
--- /dev/null
+++ b/%HOME%/.bash_utils/git.sh
@@ -0,0 +1,102 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2016 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "Cygwin configuration files" project.
+# For details, see https://github.com/egor-tensin/cygwin-home.
+# Distributed under the MIT License.
+
+list_repo_files() (
+ set -o errexit -o nounset -o pipefail
+
+ local -a cmd=(git ls-files)
+
+ while [ "$#" -gt 0 ]; do
+ case "$1" in
+ -z|-0)
+ cmd+=(-z)
+ shift
+ ;;
+
+ -h|--help)
+ echo "usage: ${FUNCNAME[0]} [-h|--help] [-z|-0]"
+ return 0
+ ;;
+
+ *)
+ echo "${FUNCNAME[0]}: unrecognized parameter: $1" >&2
+ return 1
+ ;;
+ esac
+ done
+
+ eval "${cmd[@]+"${cmd[@]}"}"
+)
+
+list_repo_dirs() (
+ set -o errexit -o nounset -o pipefail
+
+ local -a cmd=(git ls-tree -d -r)
+
+ while [ "$#" -gt 0 ]; do
+ case "$1" in
+ -z|-0)
+ cmd+=(-z)
+ shift
+ ;;
+
+ -h|--help)
+ echo "usage: ${FUNCNAME[0]} [-h|--help] [-z|-0]"
+ return 0
+ ;;
+
+ *)
+ echo "${FUNCNAME[0]}: unrecognized parameter: $1" >&2
+ return 1
+ ;;
+ esac
+ done
+
+ cmd+=(--name-only HEAD)
+
+ eval "${cmd[@]+"${cmd[@]}"}"
+)
+
+tighten_repo_security() (
+ set -o errexit -o nounset -o pipefail
+
+ list_repo_files -z | xargs -0 chmod 0600
+ list_repo_dirs -z | xargs -0 chmod 0700
+ chmod 0700 .git
+)
+
+backup_repo() (
+ set -o errexit -o nounset -o pipefail
+
+ local repo_dir
+ repo_dir="$( realpath . )"
+ local repo_name
+ repo_name="$( basename "$repo_dir" )"
+ local backup_dir="$repo_dir"
+
+ if [ $# -eq 1 ]; then
+ backup_dir="$1"
+ elif [ $# -gt 1 ]; then
+ echo "usage: ${FUNCNAME[0]} [BACKUP_DIR]" >&2
+ exit 1
+ fi
+
+ local zip_name
+ zip_name="${repo_name}_$( date -u +'%Y%m%dT%H%M%S' ).zip"
+
+ git archive \
+ --format=zip -9 \
+ --output="$backup_dir/$zip_name" \
+ --remote="$repo_dir" \
+ HEAD
+)
+
+backup_repo_dropbox() (
+ set -o errexit -o nounset -o pipefail
+
+ backup_repo "$USERPROFILE/Dropbox/backups"
+)
diff --git a/%HOME%/.bash_utils/text.sh b/%HOME%/.bash_utils/text.sh
new file mode 100644
index 0000000..ad3f203
--- /dev/null
+++ b/%HOME%/.bash_utils/text.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2016 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "Cygwin configuration files" project.
+# For details, see https://github.com/egor-tensin/cygwin-home.
+# Distributed under the MIT License.
+
+alias dos2eol='sed --binary --in-place '"'"'s/\(\r\?\)$//'"'"
+alias eol2dos='sed --binary --in-place '"'"'s/\r\?$/\r/'"'"
+
+alias trim='sed --binary --in-place '"'"'s/[[:blank:]]*\(\r\?\)$/\1/'"'"
+
+alias trimeol='sed --binary --in-place -e :a -e '"'"'/^\n*$/{$d;N;ba}'"'"
+alias trimdoseol='sed --binary --in-place -e :a -e '"'"'/^\(\r\n\)*\r$/{$d;N;ba}'"'"
+
+alias eol='sed --binary --in-place '"'"'$a\'"'"
+alias doseol='sed --binary --in-place '"'"'$s/\r\?$/\r/;a\'"'"
+
+alias trimbom='sed --binary --in-place '"'"'1 s/^\xef\xbb\xbf//'"'"
+
+lint() {
+ trim "$@" && trimeol "$@" && eol "$@"
+}
+
+doslint() {
+ trim "$@" && trimdoseol "$@" && doseol "$@"
+}
+
+replace_word() (
+ set -o errexit -o nounset -o pipefail
+
+ if [ "$#" -lt 3 ]; then
+ echo "usage: ${FUNCNAME[0]} OLD NEW PATH..." >&2
+ return 1
+ fi
+
+ local old="$1"
+ shift
+ local new="$2"
+ shift
+
+ sed --binary --in-place "s/\\b$old\\b/$new/g" "$@"
+)