From 63feeb9f369fc6176e85c1c2d8fcc863caad1946 Mon Sep 17 00:00:00 2001 From: Robert Günzler Date: Tue, 10 Feb 2026 12:32:48 +0100 Subject: start new MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Robert Günzler --- bin/clone | 124 -------------------------------------------------------------- 1 file changed, 124 deletions(-) delete mode 100755 bin/clone (limited to 'bin/clone') diff --git a/bin/clone b/bin/clone deleted file mode 100755 index 9ee160b..0000000 --- a/bin/clone +++ /dev/null @@ -1,124 +0,0 @@ -#!/bin/bash -# -# To use this create a directory that you want to use for git repos, e.g. $HOME/git and copy/symlink this script into it. -# Then you can use it like this: -# -# ./clone github.com/robertgzr/dotfiles -# ./clone https://bitbucket.org/foo/bar -# -# TODO: does it still? -# This requires url aliases to be setup for the git-clone to work properly: -# -# [url "git@github.com:"] -# insteadOf = "gh:" -# insteadOf = "https://github.com/" -# pushInsteadOf = "github:" -# pushInsteadOf = "git://github.com/" -# -set -e -[ -n "$DEBUG" ] && set -x - -SHALLOW= -RECURSE_SUBMODULES= -TEMP="$(mktemp -d -p /tmp clone.XXXXXXXXXX)" -URL= - -while getopts ":hsr" opt; do - case ${opt} in - s) SHALLOW=1 ;; - r) RECURSE_SUBMODULES=1 ;; - h | \?) - printf "usage: clone [-s][-r] URL\n" - printf "\n" - printf " URL example.com/user/repo\n" - printf " http[s]://example.com/user/repo\n" - printf "\n" - printf " -s shallow clone\n" - printf " -r recurse submodules\n" - printf " -n don't cd after cloning\n" - printf "\n" - exit 0 - ;; - esac -done -shift $((OPTIND - 1)) - -fail() { - printf "error: %s\n" "${1:-error}" - exit "${2:-1}" -} - -confirm() { - printf "%s, ok (y/n)? " "${1:-'do something'}" - read -r yn - if [[ "$yn" = "${yn#[Yy]}" ]]; then - fail "ok, exiting" 0 - fi -} - -git_clone() { - declare -a GIT_FLAGS - if [[ -n "${SHALLOW}" ]]; then - printf "* shallow clone\n" - GIT_FLAGS+=("--depth=${SHALLOW}") - fi - if [[ -n "${RECURSE_SUBMODULES}" ]]; then - printf "* recurse submodules\n" - GIT_FLAGS+=("--recurse-submodules") - fi - git clone "${GIT_FLAGS[@]}" "${@}" -} -ssh_clone() { - prefix=$1 - in=$2 - to=$3 - IFS='/' read -r -a url <<<"${in}" - ssh_url="${prefix}:${url[1]}/${url[2]}" - - printf "* via ssh: %s\n" "${ssh_url}" - git_clone "${ssh_url}" "${to}" -} -http_clone() { - to=$2 - http_url="https://${URL}" - - printf "* via http: %s\n" "${ssh_url}" - git_clone "${http_url}" "${to}" -} -clone() { - in=$1 - to=$2 - - mkdir -p "${to}" - - IFS='/' read -r -a url <<<"${in}" - case "${url[0]}" in - github.com) ssh_clone git@github.com "${in}" "${to}" ;; - gitlab.com) ssh_clone git@gitlab.com "${in}" "${to}" ;; - bitbucket.org) ssh_clone git@bitbucket.org "${in}" "${to}" ;; - git.sr.ht) ssh_clone git@git.sr.ht "${in}" "${to}" ;; - *) http_clone "${url/ /\/}" "${to}" ;; - esac - - if [ -e "${to}/.gitmodules" ]; then - git -C "${to}" submodule update --init --recursive - fi -} - -URL=$1 -if [[ -z "${URL}" ]]; then - fail "no input" -else - URL="${URL//http*:\/\//}" - URL="${URL//#*/}" -fi - -target="${PWD}/$(dirname "${URL}")" -name="$(basename "${URL}")" - -if [ ! -d "${target}/${name}" ]; then - clone "${URL}" "${TEMP}/${URL}" || fail - - install -d "${target}" || fail - mv "${TEMP}/${URL}" "${target}" || fail -fi -- cgit 1.4.1