aboutsummaryrefslogtreecommitdiff
path: root/cgit/ssh
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2026-07-22 10:35:51 +0530
committerAkshay Nair <phenax5@gmail.com>2026-07-22 10:44:04 +0530
commitd40ab7a488e0b53b9541652e588b62879bc69bba (patch)
treef73227d9117773969828ce43d30d4de5934e14c6 /cgit/ssh
parent4c142d2a977a2c377ea3bef30fa986010056ba3e (diff)
downloadbacchus-remote-d40ab7a488e0b53b9541652e588b62879bc69bba.tar.gz
bacchus-remote-d40ab7a488e0b53b9541652e588b62879bc69bba.zip
Refactor git shell commandsHEADmain
Diffstat (limited to 'cgit/ssh')
-rw-r--r--cgit/ssh/git-shell-commands/_utils/input.sh27
-rwxr-xr-xcgit/ssh/git-shell-commands/fork18
-rwxr-xr-xcgit/ssh/git-shell-commands/list26
-rwxr-xr-xcgit/ssh/git-shell-commands/new18
-rwxr-xr-xcgit/ssh/git-shell-commands/set-category15
-rwxr-xr-xcgit/ssh/git-shell-commands/set-description19
6 files changed, 72 insertions, 51 deletions
diff --git a/cgit/ssh/git-shell-commands/_utils/input.sh b/cgit/ssh/git-shell-commands/_utils/input.sh
new file mode 100644
index 0000000..d8842ba
--- /dev/null
+++ b/cgit/ssh/git-shell-commands/_utils/input.sh
@@ -0,0 +1,27 @@
+
+input_repo_name() {
+ repo_name="$(gum input --header "Repo name (alphanumeric + hyphen/dashes)")"
+ [ -z "$repo_name" ] && echo "Error: empty repo name" 1>&2 && exit 1
+ (echo "$repo_name" | grep -q "^[A-Za-z0-9_-]\+$" 2>/dev/null) || (echo "Error: invalid repo name" 1>&2 && exit 1)
+ echo "$repo_name"
+}
+
+input_repo_description() {
+ description="$( (cat "$1/description" 2>/dev/null || true) | gum write --header "Repo description")"
+ [ -z "$description" ] && echo "Error: empty description" 1>&2 && exit 1
+ echo "$description"
+}
+
+input_repo_remote_url() {
+ remote_repo_url="$(gum input --header "Repo url")";
+ [ -z "$remote_repo_url" ] && echo "Error: empty repo url" 1>&2 && exit 1
+ echo "$remote_repo_url"
+}
+
+select_repo_name() {
+ ls -1 /git | gum choose --header "Repo"
+}
+
+input_repo_category() {
+ (git -C "$1" config get gitweb.category 2>/dev/null || true) | gum input --header "Category"
+}
diff --git a/cgit/ssh/git-shell-commands/fork b/cgit/ssh/git-shell-commands/fork
index c2bc799..d09985a 100755
--- a/cgit/ssh/git-shell-commands/fork
+++ b/cgit/ssh/git-shell-commands/fork
@@ -2,21 +2,12 @@
set -eu
+. "$(dirname $0)/_utils/input.sh"
+
remote_host="git.ediblemonad.dev"
owner_info="Akshay Nair <phenax5@gmail.com>"
-if [ $# -lt 2 ]; then
- echo "Usage: fork <name> <url>" 1>&2
- exit 1
-fi
-
-repo_name="$1"; shift 1;
-[ -z "$repo_name" ] && echo "Error: empty repo name" 1>&2 && exit 1
-(echo "$repo_name" | grep -q "^[A-Za-z0-9_-]\+$" 2>/dev/null) || (echo "Error: invalid repo name" 1>&2 && exit 1)
-
-remote_repo_url="$1"; shift 1;
-[ -z "$remote_repo_url" ] && echo "Error: empty repo url" 1>&2 && exit 1
-
+repo_name="$(input_repo_name)";
repo_dir="/git/${repo_name}.git"
if [ -d "$repo_dir" ]; then
@@ -24,6 +15,9 @@ if [ -d "$repo_dir" ]; then
exit 1;
fi
+description="$(input_repo_description "$repo_dir")"
+remote_repo_url="$(input_repo_remote_url)";
+
git clone --bare "$remote_repo_url" "$repo_dir"
cd "$repo_dir"
diff --git a/cgit/ssh/git-shell-commands/list b/cgit/ssh/git-shell-commands/list
index 8a924c9..668bfbb 100755
--- a/cgit/ssh/git-shell-commands/list
+++ b/cgit/ssh/git-shell-commands/list
@@ -1,8 +1,28 @@
#!/usr/bin/env sh
+set -eu
+
+. "$(dirname $0)/_utils/input.sh"
+
git_dir=/git
+remote_host="git.ediblemonad.dev"
-ls -1 "$git_dir" | while IPS="" read name; do
- echo "$name||||$(cat "${git_dir}/${name}/description" 2>/dev/null)"
-done | column -t -d -s "||||"
+if (tty -s); then
+ selected=$(select_repo_name)
+ if ! [ -z "$selected" ]; then
+ repo_dir="${git_dir}/${selected}"
+ echo "# ${selected}"
+ echo ""
+ echo "- SSH clone url: git@${remote_host}:${repo_dir}"
+ echo "- HTTPS clone url: https://${remote_host}/${selected}"
+ echo ""
+ echo "- Category: $(git -C "$repo_dir" config get gitweb.category)"
+ echo ""
+ echo "- Description: $(cat "${repo_dir}/description" 2>/dev/null)"
+ fi
+else
+ ls -1 "$git_dir" | while IPS="" read name; do
+ echo "$name||||$(cat "${git_dir}/${name}/description" 2>/dev/null)"
+ done | column -t -d -s "||||"
+fi
diff --git a/cgit/ssh/git-shell-commands/new b/cgit/ssh/git-shell-commands/new
index 6b5a03d..4bd550a 100755
--- a/cgit/ssh/git-shell-commands/new
+++ b/cgit/ssh/git-shell-commands/new
@@ -2,22 +2,12 @@
set -eu
+. "$(dirname $0)/_utils/input.sh"
+
remote_host="git.ediblemonad.dev"
owner_info="Akshay Nair <phenax5@gmail.com>"
-if [ $# -lt 2 ]; then
- echo "Usage: new <name> <...description>" 1>&2
- exit 1
-fi
-
-repo_name="$1"; shift 1;
-[ -z "$repo_name" ] && echo "Error: empty repo name" 1>&2 && exit 1
-(echo "$repo_name" | grep -q "^[A-Za-z0-9_-]\+$" 2>/dev/null) || (echo "Error: invalid repo name" 1>&2 && exit 1)
-
-# Stupid cmdline parsing means I can't do $1 here for space separated stuff
-description="$*"
-[ -z "$description" ] && echo "Error: empty description" 1>&2 && exit 1
-
+repo_name="$(input_repo_name)";
repo_dir="/git/${repo_name}.git"
if [ -d "$repo_dir" ]; then
@@ -25,6 +15,8 @@ if [ -d "$repo_dir" ]; then
exit 1;
fi
+description="$(input_repo_description "$repo_dir")"
+
git --bare init "$repo_dir"
cd "$repo_dir"
diff --git a/cgit/ssh/git-shell-commands/set-category b/cgit/ssh/git-shell-commands/set-category
index 7f74b94..4450ff7 100755
--- a/cgit/ssh/git-shell-commands/set-category
+++ b/cgit/ssh/git-shell-commands/set-category
@@ -2,23 +2,18 @@
set -eu
-if [ $# -lt 1 ]; then
- echo "Usage: set-category <name> [category]" 1>&2
- exit 1
-fi
-
-repo_name="$1";
-[ -z "$repo_name" ] && echo "Error: empty repo name" 1>&2 && exit 1
-(echo "$repo_name" | grep -q "^[A-Za-z0-9_-]\+$" 2>/dev/null) || (echo "Error: invalid repo name" 1>&2 && exit 1)
+. "$(dirname $0)/_utils/input.sh"
-category="${2:-""}";
-repo_dir="/git/${repo_name}.git"
+repo_path="$(select_repo_name)";
+repo_dir="/git/${repo_path}"
if ! [ -d "$repo_dir" ]; then
echo "Error: $repo_name doesn't exist" 1>&2
exit 1;
fi
+category="$(input_repo_category "$repo_dir")"
+
if [ -z "$category" ]; then
git -C "$repo_dir" config unset gitweb.category
else
diff --git a/cgit/ssh/git-shell-commands/set-description b/cgit/ssh/git-shell-commands/set-description
index ea0e52e..a0f55e0 100755
--- a/cgit/ssh/git-shell-commands/set-description
+++ b/cgit/ssh/git-shell-commands/set-description
@@ -2,25 +2,18 @@
set -eu
-if [ $# -lt 2 ]; then
- echo "Usage: set-description <name> <...description>" 1>&2
- exit 1
-fi
-
-repo_name="$1"; shift 1;
-[ -z "$repo_name" ] && echo "Error: empty repo name" 1>&2 && exit 1
-(echo "$repo_name" | grep -q "^[A-Za-z0-9_-]\+$" 2>/dev/null) || (echo "Error: invalid repo name" 1>&2 && exit 1)
+. "$(dirname $0)/_utils/input.sh"
-description="$*";
-[ -z "$description" ] && echo "Error: empty description" 1>&2 && exit 1
-
-repo_dir="/git/${repo_name}.git"
+repo_path="$(select_repo_name)";
+repo_dir="/git/${repo_path}"
if ! [ -d "$repo_dir" ]; then
- echo "Error: $repo_name doesn't exist" 1>&2
+ echo "Error: $repo_path doesn't exist" 1>&2
exit 1;
fi
+description="$(input_repo_description "$repo_dir")"
+
echo "$description" > "${repo_dir}/description"
echo "Done"