Skip to content

Instantly share code, notes, and snippets.

@butuzov
Created February 24, 2019 09:15
Show Gist options
  • Select an option

  • Save butuzov/50b97a352343c34627a494d21ba394f9 to your computer and use it in GitHub Desktop.

Select an option

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
Copy Markdown
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