dotfiles/stowers/shell-utils/dot-local/bin/clone
2024-09-01 18:11:58 +02:00

31 lines
1 KiB
Bash
Executable file

#!/bin/bash
function _clone() {
if [[ "$#" -lt 1 ]]; then
echo "[!] Missing URL to clone!" >&2
return 1
fi
local url="$1"
local forge owner repo
if [[ "${url}" =~ ^ssh:\/\/[a-zA-Z0-9_\-]+@([a-zA-Z0-9_.\-]+):[0-9]+/([a-zA-Z0-9_\-]+)/([a-zA-Z0-9_\-]+)(.git)?$ ]]; then
forge="${BASH_REMATCH[1],,}"
owner="${BASH_REMATCH[2],,}"
repo="${BASH_REMATCH[3],,}"
elif [[ "${url}" =~ ^[a-zA-Z0-9_\-]+@([a-zA-Z0-9_.\-]+):([a-zA-Z0-9_\-]+)\/([a-zA-Z0-9_\-]+)(.git)?$ ]]; then
forge="${BASH_REMATCH[1],,}"
owner="${BASH_REMATCH[2],,}"
repo="${BASH_REMATCH[3],,}"
elif [[ "${url}" =~ ^https?:\/\/([a-zA-Z0-9_.\-]+)(:[0-9]+)?\/([a-zA-Z0-9_\-]+)/([a-zA-Z0-9_\-]+)(.git)?$ ]]; then
forge="${BASH_REMATCH[1],,}"
owner="${BASH_REMATCH[3],,}"
repo="${BASH_REMATCH[4],,}"
else
echo "[!] Do not know how to handle ${url}!" >&2
return 1
fi
git clone "${url}" "${WORKSPACE_DIR}/${forge}/${owner}/${repo}"
}
_clone "$@"