Skip to content
This repository has been archived by the owner on May 27, 2022. It is now read-only.

Commit

Permalink
refactor: deps, errs and other things (#315)
Browse files Browse the repository at this point in the history
* refactor: deps, errs and other things

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* refactor: deps, errs and other things

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
  • Loading branch information
caarlos0 committed Oct 11, 2019
1 parent 4c489ff commit 3aeea26
Show file tree
Hide file tree
Showing 13 changed files with 171 additions and 98 deletions.
2 changes: 1 addition & 1 deletion Makefile
@@ -1,6 +1,6 @@
SOURCE_FILES?=./...
TEST_PATTERN?=.
TEST_OPTIONS?=
TEST_OPTIONS?=-v

export PATH := ./bin:$(PATH)
export GO111MODULE := on
Expand Down
48 changes: 24 additions & 24 deletions antibodylib/antibody.go
Expand Up @@ -4,10 +4,9 @@ import (
"bufio"
"io"
"os"
"path/filepath"
"strings"
"sync"

"github.com/caarlos0/gohome"
"github.com/getantibody/antibody/bundle"
"golang.org/x/sync/errgroup"
)
Expand All @@ -29,45 +28,46 @@ func New(home string, r io.Reader, p int) *Antibody {
}

// Bundle processes all given lines and returns the shell content to execute
func (a *Antibody) Bundle() (result string, err error) {
func (a *Antibody) Bundle() (string, error) {
var g errgroup.Group
var lock sync.Mutex
var shs indexedLines
var shs safeIndexedLines
var idx int
sem := make(chan bool, a.parallelism)
scanner := bufio.NewScanner(a.r)
var sem = make(chan bool, a.parallelism)
var scanner = bufio.NewScanner(a.r)
for scanner.Scan() {
l := scanner.Text()
index := idx
var line = scanner.Text()
var index = idx
idx++
sem <- true
g.Go(func() error {
defer func() {
<-sem
}()
l = strings.TrimSpace(l)
if l == "" || l[0] == '#' {
line = strings.TrimSpace(line)
if line == "" || line[0] == '#' {
return nil
}
s, berr := bundle.New(a.Home, l).Get()
lock.Lock()
shs = append(shs, indexedLine{idx: index, line: s})
lock.Unlock()
lineBundle, berr := bundle.New(a.Home, line)
if berr != nil {
return berr
}
sh, berr := lineBundle.Get()
shs.Append(indexedLine{idx: index, line: sh})
return berr
})
}
if err = scanner.Err(); err != nil {
return
if err := scanner.Err(); err != nil {
return "", err
}
err = g.Wait()
return shs.String(), err
var err = g.Wait()
return shs.Items().String(), err
}

// Home finds the right home folder to use
func Home() string {
home := os.Getenv("ANTIBODY_HOME")
if home == "" {
home = gohome.Cache("antibody")
func Home() (string, error) {
if dir := os.Getenv("ANTIBODY_HOME"); dir != "" {
return dir, nil
}
return home
dir, err := os.UserCacheDir()
return filepath.Join(dir, "antibody"), err
}
8 changes: 6 additions & 2 deletions antibodylib/antibody_test.go
Expand Up @@ -123,12 +123,16 @@ func BenchmarkDownload(b *testing.B) {
}

func TestHome(t *testing.T) {
require.Contains(t, Home(), "antibody")
h, err := Home()
require.NoError(t, err)
require.Contains(t, h, "antibody")
}

func TestHomeFromEnvironmentVariable(t *testing.T) {
require.NoError(t, os.Setenv("ANTIBODY_HOME", "/tmp"))
require.Equal(t, "/tmp", Home())
h, err := Home()
require.NoError(t, err)
require.Equal(t, "/tmp", h)
}

func home() string {
Expand Down
20 changes: 20 additions & 0 deletions antibodylib/sort.go
Expand Up @@ -3,6 +3,7 @@ package antibodylib
import (
"sort"
"strings"
"sync"
)

type indexedLine struct {
Expand All @@ -12,6 +13,25 @@ type indexedLine struct {

type indexedLines []indexedLine

type safeIndexedLines struct {
mutex sync.Mutex
data indexedLines
}

// Append safely appends items to the slice
func (slice *safeIndexedLines) Append(item indexedLine) {
slice.mutex.Lock()
defer slice.mutex.Unlock()

slice.data = append(slice.data, item)
}

func (slice *safeIndexedLines) Items() indexedLines {
slice.mutex.Lock()
defer slice.mutex.Unlock()
return slice.data
}

// Len is needed by Sort interface
func (slice indexedLines) Len() int {
return len(slice)
Expand Down
15 changes: 9 additions & 6 deletions bundle/bundle.go
Expand Up @@ -25,17 +25,20 @@ type Bundle interface {
// caarlos0/add-to-path-style kind:path
// - Any git repo, specifying a branch:
// caarlos0/versioned-with-branch branch:v1.0 kind:zsh
func New(home, line string) Bundle {
proj := project.New(home, line)
func New(home, line string) (Bundle, error) {
proj, err := project.New(home, line)
if err != nil {
return nil, err
}
switch kind(line) {
case "path":
return pathBundle{Project: proj}
return pathBundle{Project: proj}, nil
case "fpath":
return fpathBundle{Project: proj}
return fpathBundle{Project: proj}, nil
case "dummy":
return dummyBundle{Project: proj}
return dummyBundle{Project: proj}, nil
default:
return zshBundle{Project: proj}
return zshBundle{Project: proj}, nil
}
}

Expand Down
52 changes: 33 additions & 19 deletions bundle/bundle_test.go
Expand Up @@ -3,6 +3,7 @@ package bundle
import (
"io/ioutil"
"os"
"path/filepath"
"testing"

"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -41,58 +42,71 @@ func TestSuccessfullGitBundles(t *testing.T) {
row := row
t.Run(row.line, func(t *testing.T) {
t.Parallel()
home := home()
result, err := New(home, row.line).Get()
home := home(t)
bundle, err := New(home, row.line)
require.NoError(t, err)
result, err := bundle.Get()
require.Contains(t, result, row.result)
require.NoError(t, err)
})
}
}

func TestZshInvalidGitBundle(t *testing.T) {
home := home()
_, err := New(home, "does not exist").Get()
home := home(t)
bundle, err := New(home, "does not exist")
require.NoError(t, err)
_, err = bundle.Get()
require.Error(t, err)
}

func TestZshLocalBundle(t *testing.T) {
home := home()
home := home(t)
require.NoError(t, ioutil.WriteFile(home+"/a.sh", []byte("echo 9"), 0644))
result, err := New(home, home).Get()
bundle, err := New(home, home)
require.NoError(t, err)
result, err := bundle.Get()
require.Contains(t, result, "a.sh")
require.NoError(t, err)
}

func TestZshInvalidLocalBundle(t *testing.T) {
home := home()
_, err := New(home, "/asduhasd/asdasda").Get()
home := home(t)
bundle, err := New(home, "/asduhasd/asdasda")
require.NoError(t, err)
_, err = bundle.Get()
require.Error(t, err)
}

func TestZshBundleWithNoShFiles(t *testing.T) {
home := home()
_, err := New(home, "getantibody/antibody").Get()
home := home(t)
bundle, err := New(home, "getantibody/antibody")
require.NoError(t, err)
_, err = bundle.Get()
require.NoError(t, err)
}

func TestPathInvalidLocalBundle(t *testing.T) {
home := home()
_, err := New(home, "/asduhasd/asdasda kind:path").Get()
home := home(t)
bundle, err := New(home, "/asduhasd/asdasda kind:path")
require.NoError(t, err)
_, err = bundle.Get()
require.Error(t, err)
}

func TestPathLocalBundle(t *testing.T) {
home := home()
require.NoError(t, ioutil.WriteFile(home+"whatever.sh", []byte(""), 0644))
result, err := New(home, home+" kind:path").Get()
home := home(t)
require.NoError(t, ioutil.WriteFile(filepath.Join(home, "whatever.sh"), []byte(""), 0644))
bundle, err := New(home, home+" kind:path")
require.NoError(t, err)
result, err := bundle.Get()
require.NoError(t, err)
require.Equal(t, "export PATH=\""+home+":$PATH\"", result)
require.NoError(t, err)
}

func home() string {
func home(t *testing.T) string {
home, err := ioutil.TempDir(os.TempDir(), "antibody")
if err != nil {
panic(err.Error())
}
require.NoError(t, err)
return home
}
10 changes: 5 additions & 5 deletions go.mod
@@ -1,15 +1,15 @@
module github.com/getantibody/antibody

require (
github.com/alecthomas/kingpin v0.0.0-20180312062423-a39589180ebd
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect
github.com/caarlos0/gohome v0.0.0-20181121153623-75f08ebc60b1
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/getantibody/folder v1.0.0
github.com/stretchr/testify v1.4.0
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc
golang.org/x/net v0.0.0-20191003171128-d98b1b443823 // indirect
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
golang.org/x/sys v0.0.0-20191010194322-b09406accb47 // indirect
gopkg.in/alecthomas/kingpin.v2 v2.2.6
)

go 1.13
21 changes: 9 additions & 12 deletions go.sum
@@ -1,35 +1,32 @@
github.com/alecthomas/kingpin v0.0.0-20180312062423-a39589180ebd h1:AbxeYNt8XtHtZtdmrtevooDYsCAXONNwvFveUmOO5+M=
github.com/alecthomas/kingpin v0.0.0-20180312062423-a39589180ebd/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/caarlos0/gohome v0.0.0-20181121153623-75f08ebc60b1 h1:eEcjqK1L4tSIF7Xw/5Hv9zRY+aiyOQN7y2lmPUsDFWY=
github.com/caarlos0/gohome v0.0.0-20181121153623-75f08ebc60b1/go.mod h1:2iLudGiZjvC7UEWMfDGVT1GX1sFAISaSYUuYurpXTfg=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/getantibody/folder v1.0.0 h1:CFtD8CQ45Qyq0WyjT3zZ28KzfbrCuTBFmyIl3BVKAWo=
github.com/getantibody/folder v1.0.0/go.mod h1:9Kd7ZFOzjDuqK8f5bqgdkr9yKk7pVWoiir7nVR18Drk=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc h1:c0o/qxkaO2LF5t6fQrT4b5hzyggAkLLlCUjqfRxd8Q4=
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20191003171128-d98b1b443823 h1:Ypyv6BNJh07T1pUSrehkLemqPKXhus2MkfktJ91kRh4=
golang.org/x/net v0.0.0-20191003171128-d98b1b443823/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY=
golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
Expand Down

0 comments on commit 3aeea26

Please sign in to comment.