Skip to content
Snippets Groups Projects
Select Git revision
  • 38e44dd60b2d9d1214373bba9721a7c15e50f263
  • master default
2 results

git-scaffolding

Blame
  • git-scaffolding 1.76 KiB
    #!/bin/sh
    set -eu
    
    DEFAULT_LICENSE='mit'
    STAGED_FILES=''
    
    log_skipping () {
        echo "$1 already exists, skipping" >&2
    }
    
    usage () {
        echo "$0: [-l license-type] [-n project_name] [-r]" >&2
        exit 1
    }
    
    while getopts l:n:rh flag
    do
        case $flag in
            l) LICENSE="$OPTARG";;
            n) PROJECT_NAME="$OPTARG";;
            r) RESTRUCTURED_TEXT='1';;
            h) usage;;
            \?) usage;;
        esac
    done
    shift "$(( OPTIND - 1 ))"
    
    if [ -n "${LICENSE:-}" ] && ! \
        license -list | awk '{print \$1}' | grep --quiet --fixed-strings --line-regexp "$LICENSE"
    then
        echo 'Unknown license type.' >&2
        exit 1
    fi
    
    if [ -z "${PROJECT_NAME:-}" ]
    then
        PROJECT_NAME="$(basename "$PWD")"
    fi
    
    if [ -f .gitignore ]
    then
        log_skipping .gitignore
    else
        git skel .gitignore
        STAGED_FILES="$STAGED_FILES .gitignore"
    fi
    
    if [ -z "${RESTRUCTURED_TEXT:-}" ]
    then
        if [ -f README.md ]
        then
            log_skipping README.md
        else
            git skel README.md
            sed -i "s/PROJECT_NAME/$PROJECT_NAME/" README.md
            git add README.md
            STAGED_FILES="$STAGED_FILES README.md"
        fi
    else
        if [ -f README.rst ]
        then
            log_skipping README.rst
        else
            git skel README.rst
            UNDERLINE="$(echo "$PROJECT_NAME" | sed 's/./#/g')"
            sed -i "s/PROJECT_NAME/$PROJECT_NAME/" README.rst
            sed -i "2s/.*/$UNDERLINE/" README.rst
            git add README.rst
            STAGED_FILES="$STAGED_FILES README.rst"
        fi
    fi
    
    if [ -f LICENSE.txt ]
    then
        log_skipping LICENSE.txt
    else
        git license "${LICENSE:-$DEFAULT_LICENSE}"
        STAGED_FILES="$STAGED_FILES LICENSE.txt"
    fi
    
    if [ -n "$STAGED_FILES" ]
    then
        # shellcheck disable=SC2086
        git commit --message "Scaffolding." --only $STAGED_FILES
    else
        echo 'Skipped all files, nothing to commit.' >&2
    fi