Skip to content

Instantly share code, notes, and snippets.

@butuzov
Created February 24, 2019 09:15
Show Gist options
  • Save butuzov/50b97a352343c34627a494d21ba394f9 to your computer and use it in GitHub Desktop.
Save butuzov/50b97a352343c34627a494d21ba394f9 to your computer and use it in GitHub Desktop.
`gopak` - Go PAth Kommander

Code

You can add this code to you .bashrc or something...

# Go PAth Commander?
# I am so terrible with pans-naming
# https://en.wikipedia.org/wiki/Hopak
gopak(){

    if [[ -z "${1}" ]]; then
        printf "Help: gopak\n\n"
        printf "\tgopak          : %s\n"     "Show help"
        printf "\tgopak %s        : %s\n" '?' "Show \$GOPATH variable"
        printf "\tgopak %s        : %s\n" '-' "Restore previous \$GOPATH variable"
        printf "\tgopak %s  : %s\n" 'cd $dir' "cd to \$GOPATH/src/github/\$dir"
        printf "\tgopak %s : %s\n" 'set $dir' "set new \$GOPATH directory"
        printf "\n"

        return
    fi

    # SHOW $GOPATH variable
    if [[ "${1}" == "?" ]]; then
        if [[ ! -z "${GOPATH}" ]]; then
            printf "\t\$GOPATH:%s\n\n" "${GOPATH}"
             return 0
        else
            printf "\t\$GOPATH not set\n\n"
            return 1
        fi

    fi

    # CD into SRC directory
    # tests gopak cd gopherdata/gophernotes
    if [[ "${1}" == "cd" ]]; then
        if [[ -z "${2}" ]]; then
            printf "Command isn't clear: \`gopak cd where\`?\n"

            printf "\t\`where\` suppose to ba package name\n\n"
            return 1
        fi
        cd  "$(printf '%s/src/github.com/%s' "${GOPATH}" "${2}" )"
        return $?
    fi

     # RESTORE $GOPATH variable
    if [[ "${1}" == "-" ]]; then
        printf "Restoring old \$GOPATH:\n\n" "${OLD_PATH}"
        if [[ ! -z "${OLD_GOPATH}" ]]; then
            gopak set "${OLD_GOPATH}"
            return $?
        else
            printf "\t\$OLD_GOPATH variable is empty\n\n"
            return 1
        fi
    fi

    if [[ "${1}" == "set" ]]; then
        NEW_GOPATH="${2}"
        if [[ -z "${NEW_GOPATH}" ]] || [[ ! -d "${NEW_GOPATH}" ]] ; then
            NEW_GOPATH=$(pwd)
        fi

         # updating old path
        OLD_GOPATH=$GOPATH

        if [[ $NEW_GOPATH == $OLD_GOPATH ]]; then

            printf "No Changes:\n"
            printf "OLD \$GOPATH=%s\n" $NEW_GOPATH
            return 1
        fi

        export GOPATH="$NEW_GOPATH"
        printf "NEW \$GOPATH=%s\n" $NEW_GOPATH
        printf "OLD \$GOPATH=%s\n" $OLD_GOPATH

    fi
}

Example

 > gopak
Help: gopak

	gopak          : Show help
	gopak ?        : Show $GOPATH variable
	gopak -        : Restore previous $GOPATH variable
	gopak cd $dir  : cd to $GOPATH/src/github/$dir
	gopak set $dir : set new $GOPATH directory

 $ butuzov  ~/Desktop
 > gopak ?
	$GOPATH:/Users/butuzov/go

 $ butuzov  ~/Desktop
 > gopak set $(pwd)
NEW $GOPATH=/Users/butuzov/Desktop
OLD $GOPATH=/Users/butuzov/go
 $ butuzov  ~/Desktop
 > go get github.com/pkg/profile
 $ butuzov  ~/Desktop
 > gopak cd pkg/profile
 $ butuzov  ~/Desktop/src/github.com/pkg/profile
 > ls -la
total 56
drwxr-xr-x 15 butuzov staff  480 Feb 24 11:10 .
drwxr-xr-x  3 butuzov staff   96 Feb 24 11:10 ..
drwxr-xr-x 12 butuzov staff  384 Feb 24 11:10 .git
-rw-r--r--  1 butuzov staff  181 Feb 24 11:10 .travis.yml
-rw-r--r--  1 butuzov staff   30 Feb 24 11:10 AUTHORS
-rw-r--r--  1 butuzov staff 1292 Feb 24 11:10 LICENSE
-rw-r--r--  1 butuzov staff 1305 Feb 24 11:10 README.md
-rw-r--r--  1 butuzov staff 1473 Feb 24 11:10 example_test.go
-rw-r--r--  1 butuzov staff  186 Feb 24 11:10 mutex.go
-rw-r--r--  1 butuzov staff  142 Feb 24 11:10 mutex17.go
-rw-r--r--  1 butuzov staff 6399 Feb 24 11:10 profile.go
-rw-r--r--  1 butuzov staff 6503 Feb 24 11:10 profile_test.go
-rw-r--r--  1 butuzov staff  114 Feb 24 11:10 trace.go
-rw-r--r--  1 butuzov staff  183 Feb 24 11:10 trace16.go
-rw-r--r--  1 butuzov staff  202 Feb 24 11:10 trace_test.go
 $ butuzov  ~/Desktop/src/github.com/pkg/profile
 > gopak -
Restoring old $GOPATH:

NEW $GOPATH=/Users/butuzov/go
OLD $GOPATH=/Users/butuzov/Desktop
 $ butuzov  ~/Desktop/src/github.com/pkg/profile
 > gopak ?
	$GOPATH:/Users/butuzov/go

 $ butuzov  ~/Desktop/src/github.com/pkg/profile
 >
@butuzov
Copy link
Author

butuzov commented Feb 24, 2019

quick weekend prototype

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment