You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							98 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							98 lines
						
					
					
						
							1.9 KiB
						
					
					
				
								#!/usr/bin/env bash
							 | 
						|
								
							 | 
						|
								############################  GLOBAL VARIABLES
							 | 
						|
								regex=' '
							 | 
						|
								branch="master"
							 | 
						|
								max_length=150
							 | 
						|
								
							 | 
						|
								REGEX_SUFFIX_GO=".+\.go$"
							 | 
						|
								
							 | 
						|
								############################  FUNCTIONS
							 | 
						|
								msg() {
							 | 
						|
								    printf '%b' "$1" >&2
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								die() {
							 | 
						|
								    msg "\33[31m[✘]\33[0m ${1}${2}"
							 | 
						|
								    exit 1
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								succ() {
							 | 
						|
								    msg "\33[34m[√]\33[0m ${1}${2}"
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								gostd() {
							 | 
						|
								    local branch=$1
							 | 
						|
								    local reg4exclude=$2
							 | 
						|
								    local max_length=$3
							 | 
						|
								
							 | 
						|
								    for file in `git diff $branch --name-only`
							 | 
						|
								    do
							 | 
						|
								        if ! [[ $file =~ $REGEX_SUFFIX_GO ]] || [[ $file =~ $reg4exclude ]]; then
							 | 
						|
								            continue
							 | 
						|
								        fi
							 | 
						|
								
							 | 
						|
								        error=`go fmt $file 2>&1`
							 | 
						|
								        if ! [ $? -eq 0 ]; then
							 | 
						|
								            die "go fmt $file:" "$error"
							 | 
						|
								        fi
							 | 
						|
								
							 | 
						|
								        succ "$file\n"
							 | 
						|
								
							 | 
						|
								        grep -n -E --color=always ".{$max_length}" $file | awk '{ printf ("%4s %s\n", "", $0) }'
							 | 
						|
								    done
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								get_options() {
							 | 
						|
								    while getopts "b:e:hl:" opts
							 | 
						|
								    do
							 | 
						|
								        case $opts in
							 | 
						|
								            b)
							 | 
						|
								                branch=$OPTARG
							 | 
						|
								                ;;
							 | 
						|
								            e)
							 | 
						|
								                regex=$OPTARG
							 | 
						|
								                ;;
							 | 
						|
								            h)
							 | 
						|
								                usage
							 | 
						|
								                exit 0
							 | 
						|
								                ;;
							 | 
						|
								            l)
							 | 
						|
								                max_length=$OPTARG
							 | 
						|
								                ;;
							 | 
						|
								            \?)
							 | 
						|
								                usage
							 | 
						|
								                exit 1
							 | 
						|
								                ;;
							 | 
						|
								        esac
							 | 
						|
								    done
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								usage () {
							 | 
						|
								    cat << _EOC_
							 | 
						|
								Usage:
							 | 
						|
								    gostd [options]
							 | 
						|
								
							 | 
						|
								Options:
							 | 
						|
								    -b <branch/commit>        Specify the git diff branch or commit.
							 | 
						|
								                              (default: master)
							 | 
						|
								    -e <regex>                Regex for excluding file or directory.
							 | 
						|
								    -h                        Print this usage.
							 | 
						|
								    -l <length>               Show files that exceed the limit line length.
							 | 
						|
								                              (default: 150)
							 | 
						|
								
							 | 
						|
								Examples:
							 | 
						|
								    gostd
							 | 
						|
								    gostd -b master -l 100
							 | 
						|
								    gostd -b 59d532a -e weed/pb -l 100
							 | 
						|
								_EOC_
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								main() {
							 | 
						|
								    get_options "$@"
							 | 
						|
								
							 | 
						|
								    gostd "$branch" "$regex" "$max_length"
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								############################  MAIN()
							 | 
						|
								main "$@"
							 |