Files
dotfiles/dot_local/bin/executable_ghg-clone
T

34 lines
1.1 KiB
Bash
Raw Normal View History

#!/bin/sh
# ghq get + resolve the on-disk clone path; prints the repo directory.
# Shell wrappers (fish/bash/zsh `ghg` functions) cd into the printed path —
# a child process can't change the caller's cwd.
repo=$1
if [ -z "$repo" ]; then
echo "usage: ghg-clone <repo>" >&2
exit 1
fi
# ghq natively understands https://, ssh://, git@host:…, and host/user/repo.
# Keep its output on stderr so stdout stays clean for the wrapper's cd.
ghq get "$repo" >&2 || exit
# Reduce the input to ghq's on-disk shape: <host>/<user>/<repo> —
# strip scheme (https://, ssh://, git://), user@ (git@github.com:…),
# turn scp host:path into host/path, drop trailing .git.
rel=$(printf '%s\n' "$repo" \
| sed -E 's#^[[:alnum:]]+://##; s#^[^@/]+@##; s#:#/#; s#\.git$##')
# bare "user/repo" with no host → default to github.com
case "$rel" in
*.*/*) ;;
*) rel=github.com/$rel ;;
esac
dir=$(ghq root)/$rel
if [ ! -d "$dir" ]; then
echo "ghg: expected clone at $dir but it does not exist" >&2
exit 1
fi
command -v zoxide >/dev/null 2>&1 && zoxide add "$dir"
printf '%s\n' "$dir"