From d00f8fb1791e6f412d4a8898b53cdbe3cac20daa Mon Sep 17 00:00:00 2001 From: "quentin@aristote.fr" Date: Sun, 25 Jan 2026 20:19:01 +0100 Subject: git: add shell-commands --- .../shell-commands/repo/src/lib/check-git-repository.sh | 7 +++++++ .../git/shell-commands/repo/src/lib/check-realpath.sh | 9 +++++++++ config/services/git/shell-commands/repo/src/lib/colors.sh | 14 ++++++++++++++ .../services/git/shell-commands/repo/src/lib/is-git-dir.sh | 3 +++ .../services/git/shell-commands/repo/src/lib/show-descr.sh | 3 +++ .../git/shell-commands/repo/src/lib/show-privacy.sh | 12 ++++++++++++ .../git/shell-commands/repo/src/lib/show-repo-summary.sh | 8 ++++++++ .../services/git/shell-commands/repo/src/lib/show-repo.sh | 6 ++++++ .../services/git/shell-commands/repo/src/lib/show-size.sh | 3 +++ 9 files changed, 65 insertions(+) create mode 100644 config/services/git/shell-commands/repo/src/lib/check-git-repository.sh create mode 100644 config/services/git/shell-commands/repo/src/lib/check-realpath.sh create mode 100644 config/services/git/shell-commands/repo/src/lib/colors.sh create mode 100644 config/services/git/shell-commands/repo/src/lib/is-git-dir.sh create mode 100644 config/services/git/shell-commands/repo/src/lib/show-descr.sh create mode 100644 config/services/git/shell-commands/repo/src/lib/show-privacy.sh create mode 100644 config/services/git/shell-commands/repo/src/lib/show-repo-summary.sh create mode 100644 config/services/git/shell-commands/repo/src/lib/show-repo.sh create mode 100644 config/services/git/shell-commands/repo/src/lib/show-size.sh (limited to 'config/services/git/shell-commands/repo/src/lib') diff --git a/config/services/git/shell-commands/repo/src/lib/check-git-repository.sh b/config/services/git/shell-commands/repo/src/lib/check-git-repository.sh new file mode 100644 index 0000000..c974890 --- /dev/null +++ b/config/services/git/shell-commands/repo/src/lib/check-git-repository.sh @@ -0,0 +1,7 @@ +check-git-repository() { + if [[ ! $(is-git-dir "$1") ]] + then + red "Not a git repository." + exit 2 + fi +} diff --git a/config/services/git/shell-commands/repo/src/lib/check-realpath.sh b/config/services/git/shell-commands/repo/src/lib/check-realpath.sh new file mode 100644 index 0000000..c344bd2 --- /dev/null +++ b/config/services/git/shell-commands/repo/src/lib/check-realpath.sh @@ -0,0 +1,9 @@ +check-realpath() { + local path="$1" + if [[ ! -e "$path" ]] \ + || [[ ! "$path" == /srv/git/* ]] + then + red "Forbidden path." + exit 2 + fi +} diff --git a/config/services/git/shell-commands/repo/src/lib/colors.sh b/config/services/git/shell-commands/repo/src/lib/colors.sh new file mode 100644 index 0000000..a78911d --- /dev/null +++ b/config/services/git/shell-commands/repo/src/lib/colors.sh @@ -0,0 +1,14 @@ +print_in_color() { + local color="$1" + shift + if [[ "${NO_COLOR:-}" == "" ]]; then + printf "$color%b\e[0m\n" "$*" + else + printf "%b\n" "$*" + fi +} + +red() { print_in_color "\e[31m" "$*"; } +green() { print_in_color "\e[32m" "$*"; } +blue() { print_in_color "\e[34m" "$*"; } +bold() { print_in_color "\e[1m" "$*"; } diff --git a/config/services/git/shell-commands/repo/src/lib/is-git-dir.sh b/config/services/git/shell-commands/repo/src/lib/is-git-dir.sh new file mode 100644 index 0000000..d94f2ba --- /dev/null +++ b/config/services/git/shell-commands/repo/src/lib/is-git-dir.sh @@ -0,0 +1,3 @@ +is-git-dir() { + git rev-parse --resolve-git-dir "$1" 2>/dev/null +} diff --git a/config/services/git/shell-commands/repo/src/lib/show-descr.sh b/config/services/git/shell-commands/repo/src/lib/show-descr.sh new file mode 100644 index 0000000..edf6d34 --- /dev/null +++ b/config/services/git/shell-commands/repo/src/lib/show-descr.sh @@ -0,0 +1,3 @@ +show-descr() { + echo "| $(cat "$1"/description)" +} diff --git a/config/services/git/shell-commands/repo/src/lib/show-privacy.sh b/config/services/git/shell-commands/repo/src/lib/show-privacy.sh new file mode 100644 index 0000000..11df8d1 --- /dev/null +++ b/config/services/git/shell-commands/repo/src/lib/show-privacy.sh @@ -0,0 +1,12 @@ +show-privacy() { + local mode=$(( $(stat -c %a "$1")/10 %10 )) + if [[ $mode == 0 ]] + then + red private + elif [[ $mode == 5 ]] + then + green public + else + blue unknown + fi +} diff --git a/config/services/git/shell-commands/repo/src/lib/show-repo-summary.sh b/config/services/git/shell-commands/repo/src/lib/show-repo-summary.sh new file mode 100644 index 0000000..7c0bf63 --- /dev/null +++ b/config/services/git/shell-commands/repo/src/lib/show-repo-summary.sh @@ -0,0 +1,8 @@ +show-repo-summary() { + local repo="$1" + local name="${repo#/srv/git/}" + local privacy=$(show-privacy "$repo") + local size=$(show-size "$repo") + printf "%-16s %4s " "$privacy" "$size" + bold "$name" +} diff --git a/config/services/git/shell-commands/repo/src/lib/show-repo.sh b/config/services/git/shell-commands/repo/src/lib/show-repo.sh new file mode 100644 index 0000000..d125341 --- /dev/null +++ b/config/services/git/shell-commands/repo/src/lib/show-repo.sh @@ -0,0 +1,6 @@ +show-repo() { + local repo="$1" + show-repo-summary "$repo" + printf "%13s" "" + show-descr "$repo" +} diff --git a/config/services/git/shell-commands/repo/src/lib/show-size.sh b/config/services/git/shell-commands/repo/src/lib/show-size.sh new file mode 100644 index 0000000..739f61d --- /dev/null +++ b/config/services/git/shell-commands/repo/src/lib/show-size.sh @@ -0,0 +1,3 @@ +show-size() { + du --human-readable --summarize "$1" | cut --field 1 +} -- cgit v1.2.3