summaryrefslogtreecommitdiff
path: root/config/services/git/shell-commands/repo/src/lib
diff options
context:
space:
mode:
authorquentin@aristote.fr <quentin@aristote.fr>2026-01-25 20:19:01 +0100
committerquentin@aristote.fr <quentin@aristote.fr>2026-01-25 20:48:23 +0100
commitd00f8fb1791e6f412d4a8898b53cdbe3cac20daa (patch)
tree9d493ea1c2af4721be7a27f72470dcb818fd2c47 /config/services/git/shell-commands/repo/src/lib
parentfbb1709e1504280ca5576f91d85bb7f5dfeff37a (diff)
git: add shell-commands
Diffstat (limited to 'config/services/git/shell-commands/repo/src/lib')
-rw-r--r--config/services/git/shell-commands/repo/src/lib/check-git-repository.sh7
-rw-r--r--config/services/git/shell-commands/repo/src/lib/check-realpath.sh9
-rw-r--r--config/services/git/shell-commands/repo/src/lib/colors.sh14
-rw-r--r--config/services/git/shell-commands/repo/src/lib/is-git-dir.sh3
-rw-r--r--config/services/git/shell-commands/repo/src/lib/show-descr.sh3
-rw-r--r--config/services/git/shell-commands/repo/src/lib/show-privacy.sh12
-rw-r--r--config/services/git/shell-commands/repo/src/lib/show-repo-summary.sh8
-rw-r--r--config/services/git/shell-commands/repo/src/lib/show-repo.sh6
-rw-r--r--config/services/git/shell-commands/repo/src/lib/show-size.sh3
9 files changed, 65 insertions, 0 deletions
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
+}