#!/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 "$@"