summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorRaymaekers Luca <raymaekers.luca@gmail.com>2024-10-01 13:36:47 +0200
committerRaymaekers Luca <raymaekers.luca@gmail.com>2024-10-01 13:36:47 +0200
commitd7845cdced852478e73cbd8f4b52dfc42da9c668 (patch)
tree5dc6afc6cf66f6d0d295ba6b6a6fdc95947b87a8 /bin
parent642e439ddac3c27431616778925f26d37e3db0fb (diff)
checkpoint
Diffstat (limited to 'bin')
-rwxr-xr-xbin/common/gt16
-rwxr-xr-xbin/common/gt-cmd16
-rwxr-xr-xbin/common/gt-st3
3 files changed, 25 insertions, 10 deletions
diff --git a/bin/common/gt b/bin/common/gt
index 8b0a95f..49427dc 100755
--- a/bin/common/gt
+++ b/bin/common/gt
@@ -8,9 +8,9 @@
# - parallel: optional, if installed will run the commands on all repos with parallel
# - gt-[cmd,st,sync]
-repos=$HOME/sync/share/git-track.txt
+export REPOS=$HOME/sync/share/git-track.txt
# prevent file not found errors
-touch "$repos" || exit 1
+touch "$REPOS" || exit 1
which parallel >/dev/null 2>&1 && parallel=1
@@ -28,7 +28,7 @@ usage: gt [OPTION]
EOF
}
-list_repos() { cut -f 1 -d ' ' "$repos"; }
+list_repos() { cut -f 1 -d ' ' "$REPOS"; }
# fetch repository prettily, outputs nothing if failed
fetch() {
@@ -44,7 +44,7 @@ if [ -z "$1" ]; then
exit 1
fi
-[ "$(wc -l <"$repos")" -gt 0 ] || exit 0
+[ "$(wc -l <"$REPOS")" -gt 0 ] || exit 0
while getopts ":a:c:f:lsheu" opt; do
case "$opt" in
@@ -57,12 +57,12 @@ while getopts ":a:c:f:lsheu" opt; do
repo="$(git rev-parse --show-toplevel)"
remote_url="$(git remote show -n origin | awk '/^ Fetch/ {print $NF}')"
- if grep "^$repo " "$repos" >/dev/null 2>&1; then
+ if grep "^$repo " "$REPOS" >/dev/null 2>&1; then
printf >&2 'added already.\n'
exit 3
fi
- printf '%s %s\n' "$repo" "$remote_url" >>"$repos"
+ printf '%s %s\n' "$repo" "$remote_url" >>"$REPOS"
printf >&2 'added.\n'
;;
@@ -76,8 +76,8 @@ while getopts ":a:c:f:lsheu" opt; do
;;
s) list_repos | xargs -I{} gt-st {} ;;
l) list_repos ;;
- e) $EDITOR "$repos" ;;
- f) repos="$OPTARG" ;;
+ e) $EDITOR "$REPOS" ;;
+ f) REPOS="$OPTARG" ;;
u)
>&2 printf 'pull:\n'
if [ "$parallel" ]; then
diff --git a/bin/common/gt-cmd b/bin/common/gt-cmd
index faa743a..bc5c9c9 100755
--- a/bin/common/gt-cmd
+++ b/bin/common/gt-cmd
@@ -11,10 +11,24 @@ args="$*"
repo_pretty="$(printf '%s' "$repo" | sed "s@^$HOME@~@")"
if [ ! -d "$repo" ]; then
- printf '%s missing\n' "$repo_pretty"
+ printf '%s: missing\n' "$repo_pretty"
exit 1
fi
+# Check if repo's remote's key is in ssh-agent
+# If key is not registered and command is push/pull we exit with error
+r="$(grep "$repo" "$REPOS" | cut -f 2 -d ' ' | cut -f 2 -d '@' | cut -f 1 -d ':')"
+if { [ "$command" = "push" ] || [ "$command" = "pull" ]; } &&
+ # In my ssh config every Host has the same name as its private key. This means remotes in
+ # "$REPOS" (here "$r") + .pub is the public key, so we convert the name to what would be the
+ # public key's name and check if its contents are registered in the ssh-agent.
+ [ -r "$HOME/.ssh/$r.pub" ] &&
+ ! ssh-add -L | grep "$(cat "$HOME/.ssh/$r.pub")" > /dev/null
+then
+ printf '%s: key not added\n' "$repo_pretty"
+ exit 1
+fi
+
git -C "$repo" "$command" $args >/dev/null 2>&1
[ $? -gt 0 ] && s="x" || s="o"
printf '%s: %s\n' "$repo_pretty" "$s"
diff --git a/bin/common/gt-st b/bin/common/gt-st
index 43443cd..e4bd59e 100755
--- a/bin/common/gt-st
+++ b/bin/common/gt-st
@@ -1,8 +1,9 @@
#!/bin/sh
+# gt-st
# Print status of the repo locally
+# $1: path to repo
-# path to repo
repo="$1"
[ "$1" ] || exit 1