1 Commits
Author SHA1 Message Date
Joshua Bussdieker 91b3c0b950 Testing goinstall branches 2012-02-29 20:12:37 -08:00
56 changed files with 622 additions and 778 deletions
+1
View File
@@ -1,6 +1,7 @@
*~
go
gos/
pkgs
pkgsets/
archive/
environments/
-1
View File
@@ -1 +0,0 @@
Joshua Bussdieker <josh.bussdieker@moovweb.com>
+1 -13
View File
@@ -1,19 +1,7 @@
Fri Apr 6 04:06:29 PDT 2012 Joshua Bussdieker <jbussdieker@gmail.com>
* Created automake template
Version: 1.0.x
State: LTR
CHANGES:
* Minor bug fixes and cleanup. 1.0.x will always be a safe upgrade path.
Version: 0.0.8
State: Stable
State: Development
CHANGES:
* Complete overhaul of the package system. Now uses
http://github.com/moovweb/gpkg
Version: 0.0.7
State: Stable
-19
View File
@@ -1,19 +0,0 @@
Copyright (C) 2012 Moov Corp.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
-13
View File
@@ -1,13 +0,0 @@
EXTRA_INSTALL = scripts/
gvmdir = $(bindir)/
gvm_SCRIPTS = bin/gvm
install_dir = $(prefix)/gvm
install-exec-hook:
(mkdir -p $(install_dir) ; \
cp -rf . $(install_dir))
#install-data-hook:
# (mkdir -p $(help_dir) ; \
# cp -f *_help.txt $(help_dir))
View File
-72
View File
@@ -1,72 +0,0 @@
# gvm
by Josh Bussdieker (jbuss, jaja, jbussdieker)
GVM provides an interface to manage Go versions.
Features
========
* Install/Uninstall Go versions with `gvm install [tag]` where tag is "60.3", "go1", "weekly.2011-11-08", or "tip"
* List added/removed files in GOROOT with `gvm diff`
* Manage GOPATHs with `gvm pkgset [create/use/delete] [name]`
* List latest release tags with `gvm listall`. Use `--all` to list weekly as well.
* Cache a clean copy of the latest Go source for multiple version installs.
Background
==========
When we started developing in Go mismatched dependencies and API changes plauged our build process and made it extremely difficult to merge with other peoples changes.
After nuking my entire GOROOT several times and rebuilding I decided to come up with a tool to oversee the process. It eventually evolved into what gvm is today.
Installing
==========
To install:
bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer)
Installing Go
=============
gvm install go1
gvm use go1 [--default]
Once this is done Go will be in the path and ready to use. $GOROOT and $GOPATH are set automatically.
You are now ready to create and use packages built using gpkg. Instructions can be found at http://github.com/moovweb/gpkg
List Go Versions
================
To list all installed Go versions (The current version is prefixed with "=>"):
gvm list
Uninstalling
============
To completely remove gvm and all installed Go versions and packages:
gvm implode
If that doesn't work see the troubleshooting steps at the bottom of this page.
Mac OS X Requirements
====================
Install mercurial from http://mercurial.berkwood.com/
Linux Requirements
==================
sudo apt-get install curl
sudo apt-get install git
sudo apt-get install mercurial
sudo apt-get install make
sudo apt-get install binutils
sudo apt-get install bison
sudo apt-get install gcc
FreeBSD Requirements
====================
sudo pkg_add -r bash
sudo pkg_add -r git
sudo pkg_add -r mercurial
Troubleshooting
===============
Sometimes especially during upgrades the state of gvm's files can get mixed up. This is mostly true for upgrade from older version than 0.0.8. Changes are slowing down and a LTR is imminent. But for now `rm -rf ~/.gvm` will always remove gvm. Stay tuned!
+16 -31
View File
@@ -1,34 +1,26 @@
# gvm
by Josh Bussdieker (jbuss, jaja, jbussdieker)
GVM provides an interface to manage Go versions.
Features
========
* Install/Uninstall Go versions with `gvm install [tag]` where tag is "60.3", "go1", "weekly.2011-11-08", or "tip"
* List added/removed files in GOROOT with `gvm diff`
* Manage GOPATHs with `gvm pkgset [create/use/delete] [name]`
* List latest release tags with `gvm listall`. Use `--all` to list weekly as well.
* Cache a clean copy of the latest Go source for multiple version installs.
Background
==========
When we started developing in Go mismatched dependencies and API changes plauged our build process and made it extremely difficult to merge with other peoples changes.
After nuking my entire GOROOT several times and rebuilding I decided to come up with a tool to oversee the process. It eventually evolved into what gvm is today.
Installing
==========
To install:
To install the stable release run:
bash -s stable < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer)
To install the development branch (NOT USUALLY RECOMMENDED!) run:
bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer)
Protect Your GO!
================
sudo chown -R root:root ~/.gvm/gos/
This will keep libraries from accidentally installing into the main Go soure tree
Installing Go
=============
gvm install go1
gvm use go1 [--default]
Once this is done Go will be in the path and ready to use. $GOROOT and $GOPATH are set automatically.
gvm install 60.3
gvm use 60.3
Once this is done Go will be in the path and ready to use. $GOROOT is set automatically.
List Go Versions
================
@@ -42,7 +34,7 @@ To completely remove gvm and all installed Go versions and packages:
gvm implode
Mac OS X Requirements
Mac OSX Requirements
====================
Install mercurial from http://mercurial.berkwood.com/
@@ -56,10 +48,3 @@ Linux Requirements
sudo apt-get install bison
sudo apt-get install gcc
FreeBSD Requirements
====================
sudo pkg_add -r bash
sudo pkg_add -r git
sudo pkg_add -r mercurial
+1 -1
View File
@@ -1 +1 @@
1.0.16
0.0.8-dev
-1
View File
@@ -1 +0,0 @@
aclocal && automake --add-missing && autoconf && ./configure $@
+18 -14
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/bin/bash
if [ -z "$GVM_ROOT" ]; then
tput sgr0
tput setaf 1
@@ -10,7 +10,7 @@ if [ -z "$GVM_ROOT" ]; then
exit 1
fi
. $GVM_ROOT/scripts/functions || exit 1
. $GVM_ROOT/scripts/functions
command=$1
if [[ $command == "implode" ]]; then
@@ -20,36 +20,40 @@ fi
$GVM_ROOT/scripts/gvm-check
if [[ "$?" != "0" ]]; then
display_fatal "Missing requirements."
display_error "Missing requirements. Please see messages above"
fi
if [[ $command == "version" ]]; then
display_message "Go Version Manager v$GVM_VERSION installed at $GVM_ROOT"
display_message "Go Version Manager v$GVM_VERSION"
else
if [ -f $GVM_ROOT/scripts/$command ]; then
shift
$GVM_ROOT/scripts/$command $@
elif [[ -n $command ]]; then
display_fatal "Unrecognized command line argument: '$command'"
display_error "Unrecognized command line argument: '$command'"
else
echo "Usage: gvm [command]
echo "= gvm
Description:
GVM is the Go Version Manager
* http://github.com/moovweb/gvm
== DESCRIPTION:
GVM is the Go Version Manager
== Usage
gvm Command
== Command
Commands:
version - print the gvm version number
get - gets the latest code (for debugging)
use - select a go version to use
diff - view changes to Go root
implode - completely remove gvm
install - install go versions
uninstall - uninstall go versions
cross - install go cross compilers
list - list installed go versions
listall - list available versions
alias - manage go version aliases
pkgset - manage go packages sets
"
pkg - manage go packages"
fi
fi
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/bin/bash
function gvm_prompt() {
if [[ "$1" == "g" ]]; then
echo $gvm_go_name
Executable
+6
View File
@@ -0,0 +1,6 @@
if [[ -f Makefile.gvm ]]; then
make -f Makefile.gvm $@
else
gb -bi
fi
+36 -76
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/bin/bash
display_error() {
tput sgr0
tput setaf 1
@@ -7,95 +7,55 @@ display_error() {
exit 1
}
update_profile() {
[ -f $1 ] || return 1
cat $1 | grep "$source_line" > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "$source_line" >> $1
fi
}
check_existing_go() {
if [ "$GOROOT" == "" ]; then
echo "No existing Go versions detected"
return
fi
echo "Created profile for existing install of Go at $GOROOT"
mkdir -p $GVM_DEST/$GVM_NAME/environments &> /dev/null || display_error "Failed to create environment directory"
mkdir -p $GVM_DEST/$GVM_NAME/pkgsets/system/global &> /dev/null || display_error "Failed to create new package set"
mkdir -p $GVM_DEST/$GVM_NAME/gos/system &> /dev/null || display_error "Failed to create new Go folder"
cat << EOF > $GVM_DEST/$GVM_NAME/environments/system
# Automatically generated file. DO NOT EDIT!
export GVM_ROOT; GVM_ROOT="$GVM_DEST/$GVM_NAME"
export gvm_go_name; gvm_go_name="system"
export gvm_pkgset_name; gvm_pkgset_name="global"
export GOROOT; GOROOT="$GOROOT"
export GOPATH; GOPATH="$GVM_DEST/$GVM_NAME/pkgsets/system/global"
export PATH; PATH="$GVM_DEST/$GVM_NAME/pkgsets/system/global:$GOROOT/bin:$GVM_ROOT/bin:\$PATH"
EOF
}
BRANCH=$1
GVM_DEST=$2
if [ "$GVM_DEST" == "" ]; then
GVM_DEST="$HOME"
GVM_NAME=".gvm"
if [ "$(whoami)" != "root" ]; then
GVM_DEST=~
GVM_NAME=.gvm
else
GVM_NAME="gvm"
GVM_DEST=/usr/local
GVM_NAME=gvm
fi
if [ "$SRC_REPO" == "" ]; then
SRC_REPO=https://github.com/moovweb/gvm.git
fi
ENV_FILE=~/.bashrc
SRC_REPO=git://github.com/moovweb/gvm.git
#SRC_REPO=~/install.gvm
[ "$GVM_DEST" == "" ] && display_error "No destination specified!"
[ -d $GVM_DEST/$GVM_NAME ] && display_error "Already installed!"
[ -d $GVM_DEST ] || mkdir -p $GVM_DEST > /dev/null 2>&1 || display_error "Failed to create $GVM_DEST"
[ -z `which git` ] && display_error "Could not find git
linux: apt-get install git
mac: brew install git
"
cd $GVM_DEST && git clone $SRC_REPO $GVM_NAME > /dev/null 2>&1 ||
cd $GVM_DEST && git clone $SRC_REPO $GVM_NAME > /dev/null 2>&1 ||
display_error "Failed to clone from $SRC_REPO into $GVM_DEST/$GVM_NAME"
if [ "$BRANCH" != "" ]; then
cd $GVM_DEST/$GVM_NAME && git checkout $BRANCH > /dev/null 2>&1 ||
display_error "Failed to checkout $BRANCH branch"
if [ "$BRANCH" == "stable" ]; then
cd $GVM_DEST/$GVM_NAME && git checkout $BRANCH > /dev/null 2>&1 ||
display_error "Failed to checkout $BRANCH branch"
fi
mv $GVM_DEST/$GVM_NAME/.git $GVM_DEST/$GVM_NAME/git.bak
if [ "$GVM_NAME" == ".gvm" ]; then
source_line="[[ -s \"\$HOME/.gvm/scripts/gvm\" ]] && source \"\$HOME/.gvm/scripts/gvm\""
source_file="\$HOME/.gvm/scripts/gvm"
else
source_line="[[ -s \"${GVM_DEST}/gvm/scripts/gvm\" ]] && source \"${GVM_DEST}/gvm/scripts/gvm\""
source_file="${GVM_DEST}/gvm/scripts/gvm"
fi
if [ "`uname`" == "Linux" ]; then
update_profile $HOME/.bashrc || update_profile $HOME/.bash_profile
elif [ "`uname`" == "Darwin" ]; then
update_profile $HOME/.profile || update_profile $HOME/.bash_profile
fi
if [ "$?" != "0" ]; then
echo 'Unable to locate profile settings file'
echo
echo " You will have to manually add the following line:"
echo
echo " $source_line"
echo
if [ "$(whoami)" != "root" ]; then
if [ -e ~/.bashrc ]; then
cat ~/.bashrc | grep "\[\[ -s \"\$HOME/.gvm/scripts/gvm\" ]] && source \"\$HOME/.gvm/scripts/gvm\"" > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo '[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"' >> $ENV_FILE
fi
elif [ -e ~/.profile ]; then
cat ~/.bashrc | grep "\[\[ -s \"\$HOME/.gvm/scripts/gvm\" ]] && source \"\$HOME/.gvm/scripts/gvm\"" > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo '[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"' >> $ENV_FILE
fi
else
echo 'Unable to location profile settings file'
echo
echo " You will have to manually add the following line:"
echo " [[ -s \"\$HOME/.gvm/scripts/gvm\" ]] && source \"\$HOME/.gvm/scripts/gvm\""
echo
echo "To get started right away run \`source ~/.gvm/scripts/gvm\`"
echo
fi
fi
echo "export GVM_ROOT=$GVM_DEST/$GVM_NAME" > $GVM_DEST/$GVM_NAME/scripts/gvm
echo ". \$GVM_ROOT/scripts/gvm-default" >> $GVM_DEST/$GVM_NAME/scripts/gvm
check_existing_go
[[ -s "$GVM_DEST/$GVM_NAME/scripts/gvm" ]] && source "$GVM_DEST/$GVM_NAME/scripts/gvm"
echo "Installed GVM v${GVM_VERSION}"
echo
echo "Please restart your terminal session or to get started right away run"
echo " \`source ${source_file}\`"
echo
echo "Installed GVM v$GVM_VERSION"
echo "Please restart your terminal session"
+1 -1
View File
@@ -1 +1 @@
git://github.com/moovweb
git@github.com:moovweb
-4
View File
@@ -1,4 +0,0 @@
AC_INIT(gvm, m4_esyscmd([tr -d '\n' <VERSION]))
AM_INIT_AUTOMAKE
AC_CONFIG_FILES([Makefile scripts/gvm])
AC_OUTPUT
-5
View File
@@ -1,5 +0,0 @@
Package: gvm
Version: 1.0.15
Architecture: all
Maintainer: Joshua Bussdieker <josh.bussdieker@moovweb.com>
Description: Go Version Manager
+12
View File
@@ -0,0 +1,12 @@
package main
import "os"
func main() {
gvm_root := os.Getenv("GVM_ROOT")
if gvm_root == "" {
println("ERROR: gpkg requires gvm to run (http://github.com/moovweb/gvm)")
} else {
println("GVM Package Manager for release.r60.3!")
}
}
-29
View File
@@ -1,29 +0,0 @@
#!/usr/bin/env bash
. $GVM_ROOT/scripts/functions
command=$1
if [[ -f $GVM_ROOT/scripts/alias-$command ]]; then
shift
$GVM_ROOT/scripts/alias-$command $@
elif [[ -n $command ]]; then
display_fatal "Unrecognized command line argument: '$command'"
else
echo "= gvm alias
* http://github.com/moovweb/gvm
== DESCRIPTION:
GVM alias is used to manage go version aliases
== Usage
gvm alias Command
== Command
create - create a new alias
delete - delete an alias
list - list aliases"
fi
-23
View File
@@ -1,23 +0,0 @@
#!/usr/bin/env bash
. $GVM_ROOT/scripts/functions
[[ $1 != "" ]] ||
display_fatal "Please specifiy the alias name"
[[ $2 != "" ]] ||
display_fatal "Please specifiy the go version name"
[[ ! -f "$GVM_ROOT/environments/$1" ]] ||
display_fatal "Alias already exists!"
[[ -f "$GVM_ROOT/environments/$2" ]] ||
display_fatal "Target doesn't exist!"
mkdir -p $GVM_ROOT/environments ||
display_fatal "Could not create folder"
mkdir -p $GVM_ROOT/gos/$1 ||
display_fatal "Could not create folder"
cp $GVM_ROOT/environments/$2 $GVM_ROOT/environments/$1 ||
display_fatal "Could copy environment"
echo "export gvm_alias_name=\"$1\"" >> $GVM_ROOT/environments/$1 ||
display_fatal "Could not extend environment"
-18
View File
@@ -1,18 +0,0 @@
#!/usr/bin/env bash
. $GVM_ROOT/scripts/functions
[[ $1 != "" ]] ||
display_fatal "Please specifiy the name"
[[ -f $GVM_ROOT/environments/$1 ]] ||
display_fatal "Alias doesn't exist!"
cat $GVM_ROOT/environments/$1 | $GREP_PATH "gvm_alias_name" > /dev/null ||
display_fatal "$1 is not an alias!"
rm -rf $GVM_ROOT/environments/$1 ||
display_fatal "Could not delete alias"
rm -rf $GVM_ROOT/gos/$1 ||
display_fatal "Could not delete alias"
-13
View File
@@ -1,13 +0,0 @@
#!/usr/bin/env bash
. $GVM_ROOT/scripts/functions
echo
display_message "gvm go aliases"
echo
for a in $(cd $GVM_ROOT/environments ; grep -l "gvm_alias_name" *); do
t=$(sh -c ". $GVM_ROOT/environments/$a ; echo \$gvm_go_name")
echo " $a ($t)"
done
echo
+5 -7
View File
@@ -1,5 +1,3 @@
. $GVM_ROOT/scripts/functions
_gvm()
{
local cur prev opts base
@@ -15,7 +13,7 @@ _gvm()
use|delete|empty)
[[ "$gvm_go_name" == "" ]] && return 1
[[ $COMP_CWORD > 3 ]] && return 1
local version=$(for x in `$LS_PATH $GVM_ROOT/pkgsets/$gvm_go_name`; do echo ${x} ; done )
local version=$(for x in `ls $GVM_ROOT/pkgsets/$gvm_go_name`; do echo ${x} ; done )
COMPREPLY=( $(compgen -W "${version}" -- ${cur}) )
return 0
;;
@@ -35,11 +33,11 @@ _gvm()
[[ "$gvm_go_name" == "" ]] && return 1
[[ "$gvm_pkgset_name" == "" ]] && return 1
if [[ "$COMP_CWORD" == "3" ]]; then
local version=$(for x in `$LS_PATH $GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name/pkg.gvm`; do echo ${x} ; done )
local version=$(for x in `ls $GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name/pkg.gvm`; do echo ${x} ; done )
COMPREPLY=( $(compgen -W "${version}" -- ${cur}) )
return 0
elif [[ "$COMP_CWORD" == "4" ]]; then
local version=$(for x in `$LS_PATH $GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name/pkg.gvm/${COMP_WORDS[3]}`; do echo ${x} ; done )
local version=$(for x in `ls $GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name/pkg.gvm/${COMP_WORDS[3]}`; do echo ${x} ; done )
COMPREPLY=( $(compgen -W "${version}" -- ${cur}) )
return 0
fi
@@ -58,14 +56,14 @@ _gvm()
install)
[ ! -d $GVM_ROOT/archive/go ] && return 1
[[ $COMP_CWORD > 2 ]] && return 1
local version=$(for x in `hg tags -R $GVM_ROOT/archive/go | awk '{print $1}' | $GREP_PATH -E "release|tip"`; do echo ${x} ; done )
local version=$(for x in `hg tags -R $GVM_ROOT/archive/go | awk '{print $1}' | grep -E "release|tip"`; do echo ${x} ; done )
COMPREPLY=( $(compgen -W "${version}" -- ${cur}) )
return 0
;;
use|uninstall)
[ ! -d $GVM_ROOT/gos ] && return 1
[[ $COMP_CWORD > 2 ]] && return 1
local installed_versions=$(for x in `$LS_PATH $GVM_ROOT/gos`; do echo ${x} ; done )
local installed_versions=$(for x in `ls $GVM_ROOT/gos`; do echo ${x} ; done )
COMPREPLY=( $(compgen -W "${installed_versions}" -- ${cur}) )
return 0
;;
-58
View File
@@ -1,58 +0,0 @@
#!/usr/bin/env bash
. $GVM_ROOT/scripts/functions
display_usage() {
display_message "Usage: gvm cross [os] [arch]"
display_message " os = linux/darwin/windows"
display_message " arch = amd64/386 (arm unsupported)"
}
display_list() {
echo
display_usage
echo
display_message "Installed platforms:"
echo
$LS_PATH $GOROOT/pkg | $GREP_PATH windows_ | sed 's/^/ /g'
$LS_PATH $GOROOT/pkg | $GREP_PATH darwin_ | sed 's/^/ /g'
$LS_PATH $GOROOT/pkg | $GREP_PATH linux_ | sed 's/^/ /g'
echo
exit 1
}
which go &> /dev/null || display_fatal "Only available in versions after Go 1"
[ -z "$1" ] && display_list
if [ ! -f "$GOROOT/pkg/tool/cross" ]; then
display_message "Installing x86 and x86-64 commands"
set -e
for arch in 8 6; do
for cmd in a c g l; do
go tool dist install -v cmd/$arch$cmd ||
display_fatal "Couldn't compile tool: $arch$cmd"
done
done
touch $GOROOT/pkg/tool/cross
fi
export GOOS=$1
shift
[ -z "$1" ] && display_usage && display_fatal "arch is not specified"
export GOARCH=$1
if [ ! -d "$GOROOT/pkg/${GOOS}_${GOARCH}" ]; then
display_message "Installing $GOOS $GOARCH runtime library"
if [ "$GOOS" = "windows" ]; then
export CGO_ENABLED=0
fi
cd $GOROOT/src
go tool dist install -v pkg/runtime ||
display_fatal "Couldn't compile runtime library for $GOOS $GOARCH"
go install -v -a std ||
display_fatal "Install runtime library for $GOOS $GOARCH"
else
display_message "Runtime library already installed for $GOOS $GOARCH"
fi
+8 -8
View File
@@ -1,30 +1,30 @@
#!/usr/bin/env bash
#!/bin/bash
. $GVM_ROOT/scripts/functions
version=$1
if [ "$version" != "" ]; then
fuzzy_match=`$LS_PATH $GVM_ROOT/gos | $SORT_PATH | $GREP_PATH "$version" | $HEAD_PATH -n 1 | $GREP_PATH "$version"` ||
display_fatal "Invalid version $version"
fuzzy_match=`ls $GVM_ROOT/gos | sort | grep "$version" | head -n 1 | grep "$version"` ||
display_error "Invalid version $version"
foldername=$GVM_ROOT/gos/$fuzzy_match
else
if [[ "$gvm_go_name" != "" ]]; then
if [ "$gvm_go_name" != "" ]; then
foldername=$GVM_ROOT/gos/$gvm_go_name
else
display_fatal "No version selected"
display_error "No version selected"
fi
fi
if [[ -d $foldername ]]; then
if [ -d $foldername ]; then
cd $foldername
find . > /tmp/manifest.test
diff manifest /tmp/manifest.test
if [[ "$?" == "0" ]]; then
if [ "$?" == "0" ]; then
display_message "Clean $foldername"
else
display_message "*Dirty* $foldername"
fi
else
display_fatal "Invalid version"
display_error "Invalid version"
fi
+11 -9
View File
@@ -1,15 +1,17 @@
#!/usr/bin/env bash
. $GVM_ROOT/scripts/functions || return 1
#!/bin/bash
function display_error() {
tput sgr0
tput setaf 1
echo "ERROR: $1" >&2
tput sgr0
return 1
}
function gvm() {
if [[ "$GVM_ROOT" == "" ]]; then
display_error "GVM_ROOT not set. Please source GVM_ROOT/scripts/gvm"
return $?
fi
if [[ -d $GVM_ROOT/.git ]]; then
mv $GVM_ROOT/.git $GVM_ROOT/git.bak ||
display_error "Failed to move git info out of the way"
fi
if [[ ! -d $GVM_ROOT ]]; then
display_error "GVM_ROOT does not exist. Please reinstall GVM"
return $?
@@ -21,13 +23,13 @@ function gvm() {
mkdir -p $GVM_ROOT/archive/package > /dev/null 2>&1
mkdir -p $GVM_ROOT/environments > /dev/null 2>&1
if [[ "$1" == "use" ]]; then
if [ "$1" == "use" ]; then
. $GVM_ROOT/scripts/env/use
shift
gvm_use $@
elif [[ "$1" == "implode" ]]; then
elif [ "$1" == "implode" ]; then
rm -rf $GVM_ROOT
elif [[ "$1" == "pkgset" ]] && [[ "$2" == "use" ]]; then
elif [ "$1" == "pkgset" ] && [ "$2" == "use" ]; then
. $GVM_ROOT/scripts/env/pkgset-use
shift
shift
+10 -8
View File
@@ -1,4 +1,11 @@
#!/usr/bin/env bash
display_error() {
tput sgr0
tput setaf 1
echo "ERROR: $1" >&2
tput sgr0
return 1
}
function gvm_pkgset_use() {
[[ "$1" != "" ]] ||
display_error "Please specify a package set" || return 1
@@ -6,17 +13,12 @@ function gvm_pkgset_use() {
[[ "$gvm_go_name" != "" ]] ||
display_error "No Go version selected" || return 1
fuzzy_match=`$LS_PATH $GVM_ROOT/environments | $SORT_PATH | $GREP_PATH "$gvm_go_name@" | $GREP_PATH "$1" | $HEAD_PATH -n 1` ||
fuzzy_match=`ls $GVM_ROOT/environments | sort | grep "$gvm_go_name@" | head -n 1 | grep "$1"` ||
display_error "Invalid package set" || return 1
export PATH=$GVM_PATH_BACKUP
. "$GVM_ROOT/environments/$fuzzy_match" ||
. "$GVM_ROOT/environments/$gvm_go_name@$1" ||
display_error "Failed to source the package set environment" || return 1
if [[ "$2" == "--default" ]]; then
cp $GVM_ROOT/environments/$fuzzy_match $GVM_ROOT/environments/default
fi
echo "Now using version $fuzzy_match"
}
+23 -18
View File
@@ -1,23 +1,28 @@
#!/usr/bin/env bash
function gvm_use() {
[[ "$1" != "" ]] ||
display_error "Please specifiy the version" || return 1
local VERSION=$1
fuzzy_match=`$LS_PATH $GVM_ROOT/gos | $SORT_PATH | $GREP_PATH "$1" | $HEAD_PATH -n 1 | $GREP_PATH "$1"`
if [[ "$?" != "0" ]]; then
GO_CACHE_PATH=$GVM_ROOT/archive/go
version=`hg tags -R $GO_CACHE_PATH | awk '{print $1}' | $SORT_PATH | $GREP_PATH "$VERSION" | $HEAD_PATH -n 1 | $GREP_PATH "$VERSION"`
if [[ "x$version" == "x" ]]; then
display_error "Version not found locally. Try 'gvm install $1'" || return 1
else
display_warning "$version is not installed. Install it by running 'gvm install $version'" || return 1
fi
fi
function display_error() {
tput sgr0
tput setaf 1
echo "ERROR: $1" >&2
tput sgr0
return 1
}
export PATH=$GVM_PATH_BACKUP
. $GVM_ROOT/environments/$fuzzy_match &> /dev/null || display_error "Couldn't source environment" || return 1
display_message() {
# GREEN!
tput sgr0
tput setaf 2
echo "$1"
tput sgr0
}
function gvm_use() {
[[ "$1" != "" ]] ||
display_error "Please specifiy the version" || return 1
fuzzy_match=`ls $GVM_ROOT/gos | sort | grep "$1" | head -n 1 | grep "$1"` ||
display_error "Invalid version $1" || return 1
. $GVM_ROOT/environments/$fuzzy_match
if [[ "$2" == "--default" ]]; then
cp $GVM_ROOT/environments/$fuzzy_match $GVM_ROOT/environments/default || display_error "Couldn't make $fuzzy_match default"
cp $GVM_ROOT/environments/$fuzzy_match $GVM_ROOT/environments/default
fi
display_message "Now using version $fuzzy_match"
+5 -10
View File
@@ -1,13 +1,8 @@
display_error() {
which tput &> /dev/null
if [[ "$?" == "0" ]] && [[ "$TERM" == "xterm" ]]; then
tput sgr0
tput setaf 1
echo "ERROR: $1" >&2
tput sgr0
else
echo "ERROR: $1" >&2
fi
return 1
tput sgr0
tput setaf 1
echo "ERROR: $1" >&2
tput sgr0
exit 1
}
-13
View File
@@ -1,13 +0,0 @@
display_fatal() {
which tput &> /dev/null
if [[ "$?" == "0" ]] && [[ "$TERM" == "xterm" ]]; then
tput sgr0
tput setaf 1
echo "ERROR: $1" >&2
tput sgr0
else
echo "ERROR: $1" >&2
fi
exit 1
}
+5 -10
View File
@@ -1,12 +1,7 @@
display_message() {
which tput &> /dev/null
if [[ "$?" == "0" ]] && [[ "$TERM" == "xterm" ]]; then
# GREEN!
tput sgr0
tput setaf 2
echo "$1"
tput sgr0
else
echo "$1"
fi
# GREEN!
tput sgr0
tput setaf 2
echo "$1"
tput sgr0
}
-13
View File
@@ -1,13 +0,0 @@
display_warning() {
which tput &> /dev/null
if [[ "$?" == "0" ]] && [[ "$TERM" == "xterm" ]]; then
# YELLOW!
tput sgr0
tput setaf 3
echo "WARNING: $1"
tput sgr0
else
echo "$1"
fi
return 1
}
-11
View File
@@ -1,11 +0,0 @@
#!/usr/bin/env bash
LS_ERROR="GVM couldn't find ls"
GREP_ERROR="GVM couldn't find grep"
SORT_ERROR="GVM couldn't find sort"
HEAD_ERROR="GVM couldn't find head"
LS_PATH=`unalias ls &> /dev/null; which ls` || display_error "$LS_ERROR" || return 1
GREP_PATH=`unalias grep &> /dev/null; which grep` || display_error "$GREP_ERROR" || return 1
SORT_PATH=`unalias sort &> /dev/null; which sort` || display_error "$SORT_ERROR" || return 1
HEAD_PATH=`unalias head &> /dev/null; which head` || display_error "$HEAD_ERROR" || return 1
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/bin/bash
for function in $GVM_ROOT/scripts/function/*; do
. $function
done
+7 -7
View File
@@ -1,20 +1,20 @@
#!/usr/bin/env bash
#!/bin/bash
. $GVM_ROOT/scripts/functions
[[ -d $GVM_ROOT/.git ]] || mv $GVM_ROOT/git.bak $GVM_ROOT/.git &> /dev/null ||
display_fatal "Couldn't find git info"
display_error "Couldn't find git info"
cd $GVM_ROOT && git checkout -f ||
display_fatal "Failed to clean install"
display_error "Failed to clean install"
if [[ -n $1 ]]; then
cd $GVM_ROOT && git checkout $1 -f ||
display_fatal "Failed to checkout $1 branch"
cd $GVM_ROOT && git checkout $1 -f ||
display_error "Failed to checkout $1 branch"
fi
cd $GVM_ROOT && git pull ||
display_fatal "Failed to update"
display_error "Failed to update"
mv $GVM_ROOT/.git $GVM_ROOT/git.bak ||
display_fatal "Couldn't backup git info"
display_error "Couldn't backup git info"
+11 -33
View File
@@ -1,37 +1,15 @@
#!/usr/bin/env bash
#!/bin/bash
. $GVM_ROOT/scripts/functions
# Check for hg
which hg &> /dev/null ||
display_warning "Could not find mercurial
[ -z `which hg` ] &&
display_error '* Could not find mercurial (try `sudo apt-get install mercurial`)'
[ -z `which ar` ] &&
display_error '* Could not find binutils (try `sudo apt-get install binutils (or binutils-multiarch)`)'
[ -z `which bison` ] &&
display_error '* Could not find bison (try `sudo apt-get install bison`)'
[ -z `which gcc` ] &&
display_error '* Could not find gcc (try `sudo apt-get install gcc`)'
[ -z `which make` ] &&
display_error '* Could not find make (try `sudo apt-get install make`)'
linux: apt-get install mercurial
mac: brew install mercurial
" || exit 1
# Check for ar
which ar &> /dev/null ||
display_warning "Could not find binutils
linux: apt-get install binutils
" || exit 1
# Check for bison
which bison &> /dev/null ||
display_warning "Could not find bison
linux: apt-get install bison
" || exit 1
# Check for gcc
which gcc &> /dev/null ||
display_warning "Could not find gcc
linux: apt-get install gcc
" || exit 1
# Check for make
which make &> /dev/null ||
display_warning "Could not find make
linux: apt-get install make
" || exit 1
# All good!
exit 0
-1
View File
@@ -15,7 +15,6 @@ mkdir -p $GVM_ROOT/environments > /dev/null 2>&1
export GVM_VERSION=`cat $GVM_ROOT/VERSION`
export PATH=$GVM_ROOT/bin:$PATH
export GVM_PATH_BACKUP=$PATH
[ -f $GVM_ROOT/environments/default ] && . $GVM_ROOT/environments/default
. $GVM_ROOT/scripts/env/gvm
-3
View File
@@ -1,3 +0,0 @@
export GVM_ROOT=@prefix@/gvm
. $GVM_ROOT/scripts/gvm-default
+60 -131
View File
@@ -1,123 +1,70 @@
#!/usr/bin/env bash
#!/bin/bash
. $GVM_ROOT/scripts/functions
function show_usage() {
echo "Usage: gvm install [version] [options]"
echo " -s, --source=SOURCE Install Go from specified source."
echo " -n, --name=NAME Override the default name for this version."
echo " -pb, --with-protobuf Install Go protocol buffers."
echo " -b, --with-build-tools Install package build tools."
echo " -h, --help Display this message."
}
read_command_line() {
VERSION=$1
if [[ "${VERSION:0:1}" != "-" ]]; then
shift
else
display_warning "Invalid version: $1"
show_usage
exit 1
fi
GO_SOURCE_URL=https://go.googlecode.com/hg/
for i in $*; do
case $i in
-s=*|--source=*)
GO_SOURCE_URL=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
;;
-n=*|--name=*)
GO_NAME=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
;;
-pb|--with-protobuf)
INSTALL_PB="true"
;;
-b|--with-build-tools)
INSTALL_BUILD_TOOLS="true"
;;
-h|--help)
show_usage
exit 0
;;
*)
display_warning "Invalid option $i"
show_usage
exit 65 # Bad arguments
;;
esac
done
}
download_source() {
GO_CACHE_PATH=$GVM_ROOT/archive/go
[[ -d $GO_CACHE_PATH ]] && return
display_message "Downloading Go source..."
GO_SOURCE_URL=https://go.googlecode.com/hg/
[ -d $GO_CACHE_PATH ] && return
echo "Downloading Go source..."
hg clone $GO_SOURCE_URL $GO_CACHE_PATH >> $GVM_ROOT/logs/go-download.log 2>&1 ||
display_fatal "Couldn't download Go source"
display_error "Couldn't download Go source"
}
check_tag() {
version=`hg tags -R $GO_CACHE_PATH | awk '{print $1}' | $SORT_PATH | $GREP_PATH "$VERSION" | $HEAD_PATH -n 1 | $GREP_PATH "$VERSION"`
version=`hg tags -R $GO_CACHE_PATH | awk '{print $1}' | sort | grep $VERSION | head -n 1 | grep $VERSION`
}
update_source() {
display_message "Updating Go source..."
echo "Updating Go source..."
hg pull -R $GO_CACHE_PATH >> $GVM_ROOT/logs/go-download.log 2>&1 ||
display_fatal "Couldn't get latest Go version info"
display_error "Couldn't get latest Go version info"
}
copy_source() {
hg clone -u $version $GO_CACHE_PATH $GO_INSTALL_ROOT >> $GVM_ROOT/logs/go-$GO_NAME-install.log 2>&1 ||
display_fatal "Couldn't copy source to target folder"
hg clone -u $version $GO_CACHE_PATH $GO_INSTALL_ROOT >> $GVM_ROOT/logs/go-$version-install.log 2>&1 ||
display_error "Couldn't copy source to target folder"
}
compile_go() {
display_message " * Compiling..."
echo " * Compiling..."
unset GOARCH && unset GOOS && unset GOPATH && unset GOBIN && unset GOROOT &&
export GOBIN=$GO_INSTALL_ROOT/bin &&
export PATH=$GOBIN:$PATH &&
export GOROOT=$GO_INSTALL_ROOT &&
#cd $GO_INSTALL_ROOT/src && ./all.bash &> $GVM_ROOT/logs/go-$GO_NAME-compile.log ||
cd $GO_INSTALL_ROOT/src && ./make.bash &> $GVM_ROOT/logs/go-$GO_NAME-compile.log ||
(rm -rf $GO_INSTALL_ROOT && display_fatal "Failed to compile")
cd $GO_INSTALL_ROOT/src && ./all.bash &> $GVM_ROOT/logs/go-$version-compile.log ||
(rm -rf $GO_INSTALL_ROOT && display_error "Failed to compile")
}
create_enviroment() {
new_env_file=$GVM_ROOT/environments/$GO_NAME
new_env_file=$GVM_ROOT/environments/$version
echo "export GVM_ROOT; GVM_ROOT=\"$GVM_ROOT\"" > $new_env_file
echo "export gvm_go_name; gvm_go_name=\"$GO_NAME\"" >> $new_env_file
echo "export gvm_go_name; gvm_go_name=\"$version\"" >> $new_env_file
echo "export gvm_pkgset_name; gvm_pkgset_name=\"global\"" >> $new_env_file
echo "export GOROOT; GOROOT=\"\$GVM_ROOT/gos/$GO_NAME\"" >> $new_env_file
echo "export GOPATH; GOPATH=\"\$GVM_ROOT/pkgsets/$GO_NAME/global\"" >> $new_env_file
echo "export PATH; PATH=\"\$GVM_ROOT/pkgsets/$GO_NAME/global/bin:\$GVM_ROOT/gos/$GO_NAME/bin:\$GVM_ROOT/bin:\$PATH\"" >> $new_env_file
echo "export GOROOT; GOROOT=\"\$GVM_ROOT/gos/$version\"" >> $new_env_file
echo "export GOPATH; GOPATH=\"\$GVM_ROOT/pkgsets/$version/global\"" >> $new_env_file
echo "export PATH; PATH=\"\$GVM_ROOT/pkgsets/$version/global/bin:\$GVM_ROOT/gos/$version/bin:\$GVM_ROOT/bin:\$PATH\"" >> $new_env_file
. $GVM_ROOT/scripts/env/use
gvm_use $GO_NAME &> /dev/null ||
display_fatal "Failed to use installed version"
gvm_use $version &> /dev/null
gvm pkgset create global
. $GVM_ROOT/scripts/env/pkgset-use
gvm_pkgset_use global &> /dev/null
unset GOPATH
}
install_go() {
GO_INSTALL_ROOT=$GVM_ROOT/gos/$GO_NAME
trap 'rm -rf $GO_INSTALL_ROOT; display_fatal "Canceled!"' INT
GO_INSTALL_ROOT=$GVM_ROOT/gos/$version
trap 'rm -rf $GO_INSTALL_ROOT; display_error "Canceled!"' INT
# Check for existing install
if [[ -d "$GO_INSTALL_ROOT" ]]; then
[[ -f "$GO_INSTALL_ROOT/manifest" ]] &&
display_fatal "Already installed!"
display_warning "Removing corrupt install..."
gvm uninstall $GO_NAME
fi
[ -d $GO_INSTALL_ROOT ] &&
display_error "Already installed!"
if [[ "$version" != "$GO_NAME" ]]; then
display_message "Installing $version as $GO_NAME..."
else
display_message "Installing $version..."
fi
echo "Installing $version..."
# Create the global package set folder
mkdir -p $GVM_ROOT/pkgsets/$GO_NAME >> $GVM_ROOT/logs/go-$GO_NAME-install.log 2>&1 ||
display_fatal "Couldn't create global package set folder"
mkdir -p $GVM_ROOT/pkgsets/$version >> $GVM_ROOT/logs/go-$version-install.log 2>&1 ||
display_error "Couldn't create global package set folder"
copy_source
compile_go
@@ -125,75 +72,57 @@ install_go() {
}
install_gpkg() {
display_message " * Installing gpkg..."
$GVM_GOINSTALL github.com/moovweb/gpkg > $GVM_ROOT/logs/$GO_NAME-gpkg.log 2>&1 || return 1
echo " * Installing gpkg..."
goinstall github.com/moovweb/gvm/gpkg > /dev/null 2>&1
if [[ $? -ne 0 ]]; then
echo "Failed to install gpkg"
return 1
fi
}
install_gb() {
display_message " * Installing gb..."
$GVM_GOINSTALL github.com/jbussdieker/go-gb/gb > $GVM_ROOT/logs/$GO_NAME-gb.log 2>&1 || return 1
if [[ "$version" == "release.r60.3" ]]; then
echo " * Installing gb..."
goinstall github.com/skelterjohn/go-gb/gb > /dev/null 2>&1
if [[ $? -ne 0 ]]; then
echo "Failed to install gb"
return 1
fi
fi
}
install_goprotobuf() {
which protoc &> /dev/null || display_warning "Could not find protocol buffer compiler
linux: apt-get install protobuf-compiler
mac: brew install protobuf
"
display_message " * Installing goprotobuf..."
if [[ "$GVM_GOINSTALL" == "goinstall" ]]; then
$GVM_GOINSTALL goprotobuf.googlecode.com/hg/proto > $GVM_ROOT/logs/$GO_NAME-pb-compiler.log 2>&1
if [[ "$version" == "release.r60.3" ]]; then
echo " * Installing goprotobuf..."
goinstall goprotobuf.googlecode.com/hg/proto > /dev/null 2>&1
if [[ $? -ne 0 ]]; then
display_warning "Failed to install goprotobuf"
echo "Failed to install goprotobuf"
return 1
fi
cd $GVM_ROOT/gos/$GO_NAME/src/pkg/goprotobuf.googlecode.com/hg/compiler
make install >> $GVM_ROOT/logs/$GO_NAME-pb-compiler.log 2>&1
cd $GVM_ROOT/gos/$version/src/pkg/goprotobuf.googlecode.com/hg/compiler
make install > $GVM_ROOT/logs/$version-pb-compiler.log 2>&1
if [[ $? -ne 0 ]]; then
display_warning "Failed to install goprotobuf compiler"
return 1
fi
else
$GVM_GOINSTALL code.google.com/p/goprotobuf/proto > $GVM_ROOT/logs/$GO_NAME-pb-compiler.log 2>&1
if [[ $? -ne 0 ]]; then
display_warning "Failed to install goprotobuf"
return 1
fi
$GVM_GOINSTALL code.google.com/p/goprotobuf/protoc-gen-go > $GVM_ROOT/logs/$GO_NAME-pb-compiler.log 2>&1
if [[ $? -ne 0 ]]; then
display_warning "Failed to install goprotobuf compiler"
echo "Failed to install goprotobuf compiler"
return 1
fi
fi
}
main() {
trap 'display_fatal "Canceled!"' INT
read_command_line $@
[[ "$VERSION" == "" ]] && display_fatal "No version specified"
VERSION=$1
trap 'display_error "Canceled!"' INT
# GREEN!
tput sgr0
tput setaf 2
[ -z $VERSION ] && display_error "No version specified"
download_source
check_tag || (update_source && check_tag) || display_fatal "Unrecognized Go version"
if [[ "$GO_NAME" == "" ]]; then
GO_NAME=$version
fi
check_tag || (update_source && check_tag) || display_error "Unrecognized Go version"
install_go
GVM_GOINSTALL="goinstall"
which goinstall &> /dev/null ||
GVM_GOINSTALL="go get"
x="`hg tags -R ~/.gvm/archive/go`"; echo ${x#*b0819469a6df} | $GREP_PATH "$version " &> /dev/null
if [[ "$?" == "1" ]]; then
if [[ "$INSTALL_BUILD_TOOLS" == "true" ]]; then
install_gb || display_warning "Failed to install gb"
install_gpkg || display_warning "Failed to install gpkg"
fi
if [[ "$INSTALL_PB" == "true" ]]; then
install_goprotobuf
fi
fi
install_gpkg
install_gb
install_goprotobuf
cd $GO_INSTALL_ROOT && find . > manifest
tput sgr0
}
main $@
+4 -4
View File
@@ -1,14 +1,14 @@
#!/usr/bin/env bash
#!/bin/bash
. $GVM_ROOT/scripts/functions
echo
display_message "gvm gos (installed)"
echo
if [[ -d $GVM_ROOT/gos ]]; then
if [ -d $GVM_ROOT/gos ]; then
if [[ "$gvm_go_name" != "" ]]; then
$LS_PATH -1 $GVM_ROOT/gos | sed 's/^/ /g' | sed 's/^ '$gvm_go_name\$'/=> '$gvm_go_name'/g'
ls -1 $GVM_ROOT/gos | sed 's/^/ /g' | sed 's/^ '$gvm_go_name'/=> '$gvm_go_name'/g'
else
$LS_PATH -1 $GVM_ROOT/gos | sed 's/^/ /g'
ls -1 $GVM_ROOT/gos | sed 's/^/ /g'
fi
fi
echo
+4 -12
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/bin/bash
. $GVM_ROOT/scripts/functions
function show_usage() {
@@ -32,20 +32,12 @@ read_command_line $@
echo
display_message "gvm gos (available)"
echo
versions=`curl -s https://go.googlecode.com/hg/.hgtags | awk '{ print $2 }' | $SORT_PATH`
versions=`curl -s https://go.googlecode.com/hg/.hgtags | awk '{ print $2 }' | grep "$tag_filter" | sort`
if [[ $? -ne 0 ]]; then
display_fatal "Failed to get version list from Google"
display_error "Failed to get version list from Google"
fi
for version in $versions; do
if [[ "$tag_filter" == "release" ]]; then
if [[ "${version:0:7}" == "release" ]]; then
echo " $version"
elif [[ "${version:0:3}" == "go1" ]]; then
echo " $version"
fi
else
echo " $version"
fi
echo " $version"
done
echo
Executable
+36
View File
@@ -0,0 +1,36 @@
#!/bin/bash
. $GVM_ROOT/scripts/functions
[[ $gvm_go_name != "" ]] ||
display_error "No Go version selected"
[[ -d $GVM_ROOT/gos/$gvm_go_name ]] ||
display_error "Invalid or corrupt Go version"
[[ -d $GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name ]] ||
display_error "Missing package set folder"
command=$1
if [ -f $GVM_ROOT/scripts/pkg-$command ]; then
shift
$GVM_ROOT/scripts/pkg-$command $@
elif [[ -n $command ]]; then
display_error "Unrecognized command line argument: '$command'"
else
echo "= gvm pkg
* http://github.com/moovweb/gvm
== DESCRIPTION:
GVM Package is used to manage various Go packages
== Usage
gvm pkg Command
== Command
install - install go packages
uninstall - uninstall go packages
list - list installed go packages"
fi
+195
View File
@@ -0,0 +1,195 @@
#!/bin/bash
. $GVM_ROOT/scripts/functions
show_usage() {
echo "Usage: gvm pkg install Package [options]"
echo " -v, --version=VERSION Set the package version to install."
echo " -s, --source=SORUCE Specify the source for this package."
echo " --strict Only use installed packages."
echo " -a, --all Update all dependencies."
echo " -h, --help Display this message."
}
function read_command_line() {
[[ "$1" == "" ]] &&
display_error "Please specify package name"
# Get package name
package_name=$1
sources=`cat $GVM_ROOT/config/sources`
shift
for i in $*; do
case $i in
-v=*|--version=*)
version=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
;;
-s=*|--source=*)
sources=`echo $i | sed 's/[-a-zA-Z0-9]*=//' && echo $sources`
;;
-a|--all)
all_deps="true"
;;
-h|--help*)
show_usage
exit 0
;;
--strict)
strict="true"
;;
*)
echo "Invalid option $i"
show_usage
exit 65 # Bad arguments
;;
esac
done
gvm_go_path=$GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name
cache_dir=$GVM_ROOT/archive/package/$package_name
tmp_dir=$GVM_ROOT/tmp/$$
source_dir=$tmp_dir/$package_name/src/$package_name
build_dir=$tmp_dir/$package_name/build
}
function download_package() {
[ -d $cache_dir ] && return
#echo "Downloading $package_name..."
for source in $sources; do
git clone $source/$package_name $cache_dir > /dev/null 2>&1
if [ "$?" == "0" ]; then
echo $source > $cache_dir/GVM_SOURCE
return
fi
done
display_error "Could not find $package_name in any sources"
}
function update_package_cache() {
cd $cache_dir && git pull > /dev/null 2>&1 ||
display_error "Failed to update source"
}
function copy_tmp_source() {
rm -rf $source_dir
if [ "$version" != "" ]; then
git clone $cache_dir $source_dir > /dev/null 2>&1
cd $source_dir && git checkout $version > /dev/null 2>&1 ||
return 1
else
git clone $cache_dir $source_dir > /dev/null 2>&1
cd $source_dir
git describe --exact-match > /dev/null 2>&1
if [ "$?" == "0" ]; then
git_tag=`git describe --exact-match`
git_version=`echo $git_tag | awk '{ n=split($1,path,"_"); print path[n] }'`
if [ "$BUILD_NUMBER" == "" ]; then
BUILD_NUMBER=$git_version
fi
fi
fi
}
function setup_build_env() {
rm -rf $build_dir && mkdir -p $build_dir
copy_tmp_source
if [ "$?" != "0" ]; then
update_package_cache
copy_tmp_source ||
display_error "Invalid version"
fi
if [[ -f $source_dir/VERSION ]]; then
SOURCE_VERSION=`cat $source_dir/VERSION`
fi
if [[ -n $BUILD_NUMBER ]]; then
BUILD_NUMBER="$SOURCE_VERSION.$BUILD_NUMBER"
else
if [[ "$SOURCE_VERSION" != "" ]]; then
BUILD_NUMBER="$SOURCE_VERSION.src"
else
BUILD_NUMBER="src"
fi
fi
}
function install_dep() {
[[ "$strict" == "true" ]] && display_error "Missing dependancy ($1) and strict mode is set"
[[ "$source" == "." ]] && passthrough_options="--source=. "$passthrough_options
[[ "$all_deps" == "true" ]] && passthrough_options="--all "$passthrough_options
gvm pkg install $1 $passthrough_options ||
display_error "Failed to install dependency $1"
}
function load_dep() {
if [[ "$all_deps" == "true" ]]; then
install_dep $1
fi
CUR_PKG=$gvm_go_path/pkg.gvm/$1/current
if [ -e "$CUR_PKG/BUILD_VERSION" ]; then
echo "pkg $1 `cat $CUR_PKG/BUILD_VERSION`" >> $build_dir/manifest
else
install_dep $1
fi
cp -rf $CUR_PKG/pkg $build_dir
}
function check_deps() {
export GOPATH=$build_dir
echo ":source `cat $cache_dir/GVM_SOURCE`" >> $build_dir/manifest
if [ -f "$source_dir/Package.gvm" ]; then
for line in `cat $source_dir/Package.gvm | grep ^pkg | awk '{ print $2 }'`; do
load_dep $line
done
fi
echo ":complete" >> $build_dir/manifest
}
function copy_source() {
mkdir -p $gvm_go_path/pkg.gvm/$package_name/$BUILD_NUMBER
cp -rf $source_dir $gvm_go_path/pkg.gvm/$package_name/$BUILD_NUMBER/
}
function build_package() {
echo "Installing $package_name-$BUILD_NUMBER..."
echo "$BUILD_NUMBER" > $build_dir/BUILD_VERSION
cd $source_dir && gvmake > $build_dir/build.log 2>&1
if [ $? -ne 0 ]; then
echo "ERROR: Failed to build"
cat "$build_dir/build.log"
exit 1
fi
}
function install_package() {
mkdir -p $gvm_go_path/pkg.gvm/$package_name/$BUILD_NUMBER &&
cp -r $build_dir/* $gvm_go_path/pkg.gvm/$package_name/$BUILD_NUMBER &&
rm -f $gvm_go_path/pkg.gvm/$package_name/current &&
ln -s $gvm_go_path/pkg.gvm/$package_name/$BUILD_NUMBER $gvm_go_path/pkg.gvm/$package_name/current &&
if [ $? -ne 0 ]; then
echo "ERROR: Failed to install"
exit 1
fi
if [ -d $build_dir/bin ]; then
echo " * Installing binaries"
mkdir -p $gvm_go_path/bin &&
cp -f $build_dir/bin/* $gvm_go_path/bin/
fi
}
function cleanup() {
rm -rf $tmp_dir
}
read_command_line $@
download_package
setup_build_env
check_deps
copy_source
build_package
install_package
cleanup
+39
View File
@@ -0,0 +1,39 @@
#!/bin/bash
. $GVM_ROOT/scripts/functions
echo "
gvm packages $gvm_go_name@$gvm_pkgset_name"
echo
package_folder=$GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name
for package in $package_folder/pkg.gvm/*; do
if [ $package == "$package_folder/pkg.gvm/*" ]; then
break
fi
package_name=`echo $package | awk '{ n=split($1,path,"/"); print path[n] }'`
output=$package_name" ("
first=true
for version in $package/*; do
version=`echo $version | awk '{ n=split($1,path,"/"); print path[n] }'`
if [ "$version" != "current" ]; then
if [ $first == true ]; then
first=false
else
output=$output", "
fi
version=`echo $version | awk '{ n=split($1,path,"/"); print path[n] }'`
output=$output$version
fi
done
output=$output")"
echo $output
done
if [ -f $package_folder/goinstall.log ]; then
echo
echo "Installing via goinstall"
echo
cat $package_folder/goinstall.log
fi
echo
+31
View File
@@ -0,0 +1,31 @@
#!/bin/bash
. $GVM_ROOT/scripts/functions
[[ "$1" == "" ]] &&
display_error "Please specify package name"
gvm_go_path=$GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name
UNINSTALL_ROOT=$gvm_go_path/pkg.gvm/$1
if [[ ! -d $UNINSTALL_ROOT ]]; then
echo "ERROR: Invalid package name"
exit 1
fi
if [[ "$2" != "" ]]; then
UNINSTALL_ROOT=$UNINSTALL_ROOT/$2
fi
if [[ -d $UNINSTALL_ROOT ]]; then
rm -rf $UNINSTALL_ROOT
else
echo "ERROR: Invalid package version"
exit 1
fi
if [[ "$4" != "" ]]; then
echo "Uninstalled $1 version $2"
else
echo "Uninstalled $1"
fi
+20
View File
@@ -0,0 +1,20 @@
#!/bin/bash
. $GVM_ROOT/scripts/functions
[[ "$1" == "" ]] &&
display_error "Please specify package name"
[[ ! -d $GVM_ROOT/archive/package/$1 ]] &&
display_error "Invalid package"
cd $GVM_ROOT/archive/package/$1
git pull &> /dev/null
if [ "$?" == "1" ]; then
echo "Changes!"
else
echo "No changes"
fi
#cd git pull
#gvm_go_path=$GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name
+6 -6
View File
@@ -1,19 +1,19 @@
#!/usr/bin/env bash
#!/bin/bash
. $GVM_ROOT/scripts/functions
[[ $gvm_go_name != "" ]] ||
display_fatal "No Go version selected"
display_error "No Go version selected"
[[ -d $GVM_ROOT/gos/$gvm_go_name ]] ||
display_fatal "Invalid or corrupt Go version"
display_error "Invalid or corrupt Go version"
[[ -d $GVM_ROOT/pkgsets/$gvm_go_name ]] ||
display_fatal "Missing package set folder for this Go version"
display_error "Missing package set folder for this Go version"
command=$1
if [[ -f $GVM_ROOT/scripts/pkgset-$command ]]; then
if [ -f $GVM_ROOT/scripts/pkgset-$command ]; then
shift
$GVM_ROOT/scripts/pkgset-$command $@
elif [[ -n $command ]]; then
display_fatal "Unrecognized command line argument: '$command'"
display_error "Unrecognized command line argument: '$command'"
else
echo "= gvm pkgset
+10 -10
View File
@@ -1,20 +1,20 @@
#!/usr/bin/env bash
#!/bin/bash
. $GVM_ROOT/scripts/functions
[[ $1 != "" ]] ||
display_fatal "Please specifiy the name"
display_error "Please specifiy the name"
[[ ! -f "$GVM_ROOT/environments/$gvm_go_name@$1" ]] ||
display_fatal "Packageset already exists!"
display_error "Packageset already exists!"
mkdir -p $GVM_ROOT/pkgsets/$gvm_go_name/$1 ||
display_fatal "Could not create folder"
display_error "Could not create folder"
cp $GVM_ROOT/environments/$gvm_go_name $GVM_ROOT/environments/$gvm_go_name@$1 ||
display_fatal "Could copy environment"
display_error "Could copy environment"
echo "export gvm_pkgset_name=\"$1\"" >> $GVM_ROOT/environments/$gvm_go_name@$1 ||
display_fatal "Could not extend environment"
echo "export GOPATH; GOPATH=\"$GVM_ROOT/pkgsets/$gvm_go_name/$1:\$GOPATH\"" >> $GVM_ROOT/environments/$gvm_go_name@$1 ||
display_fatal "Could not extend environment"
echo "export PATH; PATH=\"$GVM_ROOT/pkgsets/$gvm_go_name/$1/bin:\$PATH\"" >> $GVM_ROOT/environments/$gvm_go_name@$1 ||
display_fatal "Could not extend environment"
display_error "Could not extend environment"
echo "export GOPATH; GOPATH=\"$GVM_ROOT/pkgsets/release.r60.3/$1:\$GOPATH\"" >> $GVM_ROOT/environments/$gvm_go_name@$1 ||
display_error "Could not extend environment"
echo "export PATH; PATH=\"$GVM_ROOT/pkgsets/release.r60.3/$1/bin:\$PATH\"" >> $GVM_ROOT/environments/$gvm_go_name@$1 ||
display_error "Could not extend environment"
+6 -6
View File
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
#!/bin/bash
. $GVM_ROOT/scripts/functions
[[ $gvm_go_name != "" ]] ||
display_fatal "No Go version selected"
display_error "No Go version selected"
[[ $1 != "" ]] ||
display_fatal "Please specifiy the name"
display_error "Please specifiy the name"
[[ -d $GVM_ROOT/pkgsets/$gvm_go_name/$1 ]] ||
display_fatal "Packageset doesn't exist!"
display_error "Packageset doesn't exist!"
rm -rf $GVM_ROOT/pkgsets/$gvm_go_name/$1 ||
display_fatal "Could not delete package set"
display_error "Could not delete package set"
rm -rf $GVM_ROOT/environments/$gvm_go_name@$1 ||
display_fatal "Could not delete package set"
display_error "Could not delete package set"
+4 -4
View File
@@ -1,8 +1,8 @@
#!/usr/bin/env bash
#!/bin/bash
. $GVM_ROOT/scripts/functions
[[ $gvm_pkgset_name != "" ]] ||
display_fatal "No Package set selected"
[[ $gvm_pkgset_name != "" ]] ||
display_error "No Package set selected"
rm -rf $GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name/* ||
display_fatal "Could not delete package set files"
display_error "Could not delete package set files"
+10 -17
View File
@@ -1,20 +1,13 @@
#!/usr/bin/env bash
. $GVM_ROOT/scripts/functions
echo
display_message "gvm go package sets ($gvm_go_name)"
echo
if [[ -d $GVM_ROOT/pkgsets/$gvm_go_name ]]; then
for cur_dir in $GVM_ROOT/pkgsets/$gvm_go_name/*; do
[[ "$cur_dir" == "$GVM_ROOT/pkgsets/$gvm_go_name/*" ]] && exit
pkgset=`basename $cur_dir`
if [[ "$gvm_pkgset_name" == "$pkgset" ]]; then
echo "=> $pkgset"
else
echo " $pkgset"
fi
done
#!/bin/bash
echo "
gvm go package sets ($gvm_go_name)
"
if [ -d $GVM_ROOT/pkgsets ]; then
if [[ $gvm_pkgset_name == "" ]]; then
ls -1 $GVM_ROOT/pkgsets/$gvm_go_name | sed 's/^/ /g'
else
ls -1 $GVM_ROOT/pkgsets/$gvm_go_name | sed 's/^/ /g' | sed 's/^ '$gvm_pkgset_name'/=> '$gvm_pkgset_name'/g'
fi
fi
echo
Executable
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
. $GVM_ROOT/scripts/functions
display_message "*** CURRENT SOURCES ***"
echo
cat $GVM_ROOT/config/sources
-15
View File
@@ -1,15 +0,0 @@
#!/usr/bin/env bash
. $GVM_ROOT/scripts/functions/tools
echo $1 | sed -n -e '/_.*_/ p' | $GREP_PATH "_" &> /dev/null
if [ "$?" == "0" ]; then
version=`echo $1 | sed 's/_\(.*\)_/\1/'`
if [[ ! -f $GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name/pkg.gvm/{{package_name}}/$version/bin/{{binary_name}} ]]; then
echo "GVM: Invalid version"
exit 1
fi
shift
$GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name/pkg.gvm/{{package_name}}/$version/bin/{{binary_name}} $@
else
$GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name/pkg.gvm/{{package_name}}/current/bin/{{binary_name}} $@
fi
+12 -15
View File
@@ -1,22 +1,19 @@
#!/usr/bin/env bash
#!/bin/bash
. $GVM_ROOT/scripts/functions
[[ "$1" == "" ]] &&
display_fatal "Please specifiy the version"
display_error "Please specifiy the version"
fuzzy_match=`$LS_PATH $GVM_ROOT/gos | $SORT_PATH | $GREP_PATH "$1" | $HEAD_PATH -n 1 | $GREP_PATH "$1"` ||
display_fatal "Invalid version $1"
fuzzy_match=`ls $GVM_ROOT/gos | sort | grep "$1" | head -n 1 | grep "$1"` ||
display_error "Invalid version $1"
if [[ -d $GVM_ROOT/gos/$fuzzy_match ]]; then
rm -rf $GVM_ROOT/pkgsets/$fuzzy_match &> /dev/null ||
display_fatal "Couldn't remove pkgsets"
rm -f $GVM_ROOT/environments/$fuzzy_match &> /dev/null ||
display_fatal "Couldn't remove environment files"
rm -f "$GVM_ROOT/environments/$fuzzy_match@"* &> /dev/null ||
display_fatal "Couldn't remove pkgset environment files"
rm -rf $GVM_ROOT/gos/$fuzzy_match &> /dev/null ||
display_fatal "Couldn't remove Go folder"
display_message "Uninstalled version $fuzzy_match"
if [ -d $GVM_ROOT/gos/$fuzzy_match ]; then
rm -rf $GVM_ROOT/gos/$fuzzy_match
rm -rf $GVM_ROOT/pkgsets/$fuzzy_match
rm -f $GVM_ROOT/environments/$fuzzy_match
rm -f "$GVM_ROOT/environments/$fuzzy_match@"*
echo "Uninstalled version $fuzzy_match"
else
display_fatal "Invalid version"
display_error "Invalid version"
fi
-9
View File
@@ -1,9 +0,0 @@
#!/usr/bin/env bash
. $GVM_ROOT/scripts/functions
cd $GVM_ROOT/archive/go &> /dev/null ||
display_fatal "Failed to find local Go source"
cd $GVM_ROOT/archive/go && hg pull ||
display_fatal "Failed to update"
-4
View File
@@ -1,4 +0,0 @@
#!/usr/bin/env bash -ex
TEST_OUTPUT=`gvm version`
[ "$TEST_OUTPUT" != "" ]
echo "Success!"