115 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| if [ "$BASIC_BASE_URL" == "" ]; then
 | |
|     base_url="https://gitea.tforgione.fr/basic/"
 | |
|     custom_base_url=false
 | |
| else
 | |
|     base_url=$BASIC_BASE_URL
 | |
|     echo $base_url | grep /$ > /dev/null 2>&1
 | |
|     if [ $? -ne 0 ]; then
 | |
|         base_url="$base_url"/
 | |
|     fi
 | |
|     custom_base_url=true
 | |
| fi
 | |
| 
 | |
| eprint() {
 | |
|     echo -e >&2 "\x1B[1;31merror:\x1B[0m" $@
 | |
| }
 | |
| 
 | |
| info() {
 | |
|     echo -e "\x1B[1minfo:\x1B[0m" $@
 | |
| }
 | |
| 
 | |
| info_n() {
 | |
|     echo -en "\x1B[1minfo:\x1B[0m" $@
 | |
| }
 | |
| 
 | |
| print-help() {
 | |
|     echo -e "\033[32mbasic\033[0m"
 | |
|     echo -e "Thomas Forgione <thomas@forgione.fr>"
 | |
|     echo -e "A script that automatically clones templates from $base_url"
 | |
|     echo -e "Use the environment variable BASIC_BASE_URL to clone templates from somewhere else."
 | |
|     echo
 | |
|     print-usage
 | |
| }
 | |
| 
 | |
| print-usage() {
 | |
|     echo -e "\033[33mUSAGE:\033[0m"
 | |
|     echo -e "    \033[32mbasic init <template>\033[0m                initialize a template in the current directory"
 | |
|     echo -e "    \033[32mbasic init <template> <directory>\033[0m    initialize a template in the specified directory"
 | |
| 
 | |
| }
 | |
| 
 | |
| print-usage-and-exit() {
 | |
|     print-usage
 | |
|     exit $1
 | |
| }
 | |
| 
 | |
| git_clone() {
 | |
|     GIT_TERMINAL_PROMPT=0 git ls-remote $1 > /dev/null 2>&1
 | |
|     if [ $? -ne 0 ]; then
 | |
|         eprint "the repository $1 does not exist or is private"
 | |
|         exit 1
 | |
|     fi
 | |
| 
 | |
|     if [ -d $2 ] && [ ! -z "$(ls -A $2)" ]; then
 | |
|         if [ "$2" == "." ]; then
 | |
|             eprint "the current directory is not empty"
 | |
|             info "use \`basic init <template> <directory>\` to specify another directory"
 | |
|         else
 | |
|             eprint "the directory $2 exists and is not empty"
 | |
|         fi
 | |
|         print-usage-and-exit 2
 | |
|     fi
 | |
| 
 | |
|     info_n "downloading template..."
 | |
|     GIT_TERMINAL_PROMPT=0 git clone $@ > /dev/null 2>&1
 | |
|     if [ $? -ne 0 ]; then
 | |
|         echo >&2
 | |
|         eprint "failed to download template"
 | |
|         print-usage-and-exit 2
 | |
|     fi
 | |
|     echo " done!"
 | |
| }
 | |
| 
 | |
| init() {
 | |
|     template=$1
 | |
| 
 | |
|     if [ $# -gt 1 ]; then
 | |
|         name=$2
 | |
|     else
 | |
|         name=.
 | |
|     fi
 | |
| 
 | |
|     git_clone $base_url/$1 $name
 | |
|     rm -rf $name/.git
 | |
| }
 | |
| 
 | |
| main() {
 | |
|     arg=$1
 | |
|     shift
 | |
| 
 | |
|     case $arg in
 | |
|         "init")
 | |
|             init $@
 | |
|             ;;
 | |
| 
 | |
|         "help")
 | |
|             print-help
 | |
|             exit
 | |
|             ;;
 | |
| 
 | |
|         ?*)
 | |
|             eprint "command $arg does not exist"
 | |
|             print-usage-and-exit 1
 | |
|             ;;
 | |
| 
 | |
|         "")
 | |
|             print-help
 | |
|             exit
 | |
|             ;;
 | |
|     esac
 | |
| }
 | |
| 
 | |
| main $@
 |