#!/bin/bash reposDirectory=/home/git/repositories reposList=/home/git/repos.list echo "1) Create a new repo" echo "2) Edit a repo" echo "3) Delete a repo" echo "4) Exit" while [[ -z $option ]] || [[ $option -gt 4 ]] || [[ $option -lt 1 ]]; do read -p "Choose an option: " option done if [[ $option == 1 ]]; then read -p "What's the repo name? " repoName read -p "What's the repo description? [default: ''] " repoDesc # chronic hides output if chronic git config user.name && chronic git config user.email; then username=$(git config user.name) email="<$(git config user.email)>" echo "Your git configuration has a username and email set:" echo "Username: $username" echo "Email: $email" read -p "Set owner to your git config? [default: 'y'] (y/n) " usegc if [[ $usegc == [yY] ]] || [[ -z $usegc ]]; then repoOwner="$username $email" echo "Author set to \"$repoOwner\"" fi fi if [[ $usegc == [nN] ]] || [[ -z $usegc ]]; then read -p "What's the owner name? [default: ''] " repoOwner fi echo "Performing magic wizardry..." echo "Adding repo to list..." echo $repoName >> $reposList echo "Creating directory for $repoName.." mkdir $reposDirectory/$repoName echo "Initializing bare repository and setting permissions..." git init --bare $reposDirectory/$repoName chown git:git $reposDirectory/$repoName --recursive echo "Setting repository owner..." echo [gitweb] >> $reposDirectory/$repoName/config echo "owner = $repoOwner" >> $reposDirectory/$repoName/config echo "Setting repository description..." echo -n "" > $reposDirectory/$repoName/description if [[ -n "$repoDesc" ]]; then echo "$repoDesc" >> $reposDirectory/$repoName/description fi echo "$repoName magically appeared!" elif [[ $option == 2 ]]; then i=1 while read line; do echo "$i) $line" i=$((i+1)) done <$reposList while [[ -z $repo ]] || [[ $repo -gt $((i-1)) ]] || [[ $repo -lt 1 ]]; do read -p "Choose a repo to edit: " repo done repo=$(sed "$repo!d" $reposList) echo "1) Edit repo name" echo "2) Edit repo description" echo "3) Edit repo author" while [[ -z $editOption ]] || [[ $editOption -gt 3 ]] || [[ $editOption -lt 1 ]]; do read -p "Choose an option: " editOption done if [[ $editOption == 1 ]]; then read -p "What is the repo's new name? " newName sed -i "s/$repo/$newName/" $reposList echo $reposDirectory/$repo $repoDirectory/$newName mv $reposDirectory/$repo $reposDirectory/$newName echo "$repo has transformed into $newName!" elif [[ $editOption == 2 ]]; then read -p "What is the repo's new description? " newDesc mv $reposDirectory/$repo/description $reposDirectory/$repo/description.bk echo $newDesc >> $reposDirectory/$repo/description rm $reposDirectory/$repo/description.bk echo "$repo's description has altered!" elif [[ $editOption == 3 ]]; then read -p "What is the repo's new author? " newAuthor sed -i "s/\(owner = \)\(.*\)/\1$newAuthor/g" $reposDirectory/$repo/config echo "$repo's author has been refashioned!" fi elif [[ $option == 3 ]]; then i=1 while read line; do echo "$i) $line" i=$((i+1)) done <$reposList while [[ -z $repoDelete ]] || [[ $repoDelete -gt $((i-1)) ]] || [[ $repoDelete -lt 1 ]]; do read -p "Choose a repo to delete: " repoDelete done echo "Performing magic wizardry..." repoName=$(sed "$repoDelete!d" $reposList) echo "Removing $repoName from $reposList" sed -i "/$repoName/d" $reposList echo "Deleting $repoName directory..." rm -rf $reposDirectory/$repoName echo "$repoName has vanished!" else exit fi