#!/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 " >&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: // — # 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"