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