dotfiles/stowers/shell-utils/dot-local/bin/clone

32 lines
1.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[2],,}"
owner="${BASH_REMATCH[4],,}"
repo="${BASH_REMATCH[5],,}"
elif [[ "${url}" =~ ^([a-zA-Z0-9_\-]+@)?([a-zA-Z0-9_.\-]+):([a-zA-Z0-9_\-\/]+)\/([a-zA-Z0-9_\-]+)(.git)?$ ]]; then
forge="${BASH_REMATCH[2],,}"
owner="${BASH_REMATCH[3],,}"
repo="${BASH_REMATCH[4],,}"
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
mkdir -p "${WORKSPACE_DIR}/${forge}/${owner}"
git clone "${url}" "${WORKSPACE_DIR}/${forge}/${owner}/${repo}"
}
_clone "$@"