diff --git a/private_dot_local/bin/clone-all-gitea-repos.sh b/private_dot_local/bin/clone-all-gitea-repos.sh new file mode 100644 index 0000000..bd2031a --- /dev/null +++ b/private_dot_local/bin/clone-all-gitea-repos.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +GITEA_HOST=$1 + +if [ -z "$GITEA_HOST" ] || [ -z "$GITEA_ACCESS_TOKEN" ] ; then + echo "Clones all repos that you have access to into the current directory." + echo "You must set \$GITEA_ACCESS_TOKEN to a value from the gitea interface." + echo "Usage: $0 " + exit 1 +fi + +mkdir -p archived +for i in $(curl -s --header "Authorization: token $GITEA_ACCESS_TOKEN" "${GITEA_HOST}/api/v1/user/repos?limit=50" | jq -r 'map(.name + "," + .ssh_url + "," + (.archived | tostring)) | flatten[]') ; do + OLDIFS=$IFS + IFS=',' + set -- "$i" + if [ "$3" == "true" ] ; then + if [ -d "$1" ] ; then + echo "Moving $1 into archived/$1..." + mv "$1" archived/ + else + if [ -d "archived/$1" ] ; then + echo "Archived repo $1 already exists, skipping." + else + echo "Cloning archived/$1 from $2" + git clone -q "$2" "archived/$1" + fi + fi + else + if [ -d "$1" ] ; then + echo "Repo $1 already exists, skipping." + else + echo "Cloning $1 from $2" + git clone -q "$2" + fi + fi + IFS=$OLDIFS +done