From 13568d0b651fe9b0bb4f828a757818896ce6def8 Mon Sep 17 00:00:00 2001 From: Benoit Gagnon Date: Thu, 30 Apr 2020 22:45:49 -0400 Subject: [PATCH 1/3] fix LocalPackage install for relative paths The vendor dir (here called "dir") is already joined with the CWD in installCommand(). it should not be joined again here. Also adds a logging message to show that a local package was installed. --- cmd/jb/install.go | 3 ++- pkg/local.go | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cmd/jb/install.go b/cmd/jb/install.go index 31ab4ba..b742de9 100644 --- a/cmd/jb/install.go +++ b/cmd/jb/install.go @@ -72,7 +72,8 @@ func installCommand(dir, jsonnetHome string, uris []string, single bool) int { } } - locked, err := pkg.Ensure(jsonnetFile, filepath.Join(dir, jsonnetHome), lockFile.Dependencies) + vendorDir := filepath.Join(dir, jsonnetHome) + locked, err := pkg.Ensure(jsonnetFile, vendorDir, lockFile.Dependencies) kingpin.FatalIfError(err, "failed to install packages") pkg.CleanLegacyName(jsonnetFile.Dependencies) diff --git a/pkg/local.go b/pkg/local.go index d91d733..9ac321e 100644 --- a/pkg/local.go +++ b/pkg/local.go @@ -19,6 +19,7 @@ import ( "os" "path/filepath" + "github.com/fatih/color" "github.com/pkg/errors" "github.com/jsonnet-bundler/jsonnet-bundler/spec/v1/deps" @@ -41,7 +42,7 @@ func (p *LocalPackage) Install(ctx context.Context, name, dir, version string) ( } oldname := filepath.Join(wd, p.Source.Directory) - newname := filepath.Join(wd, filepath.Join(dir, name)) + newname := filepath.Join(dir, name) err = os.RemoveAll(newname) if err != nil { @@ -58,5 +59,7 @@ func (p *LocalPackage) Install(ctx context.Context, name, dir, version string) ( return "", errors.Wrap(err, "failed to create symlink for local dependency: %w") } + color.Magenta("LOCAL %s -> %s", name, oldname) + return "", nil } From f2a24b787bc104be89658f765ef7c6e89d07913d Mon Sep 17 00:00:00 2001 From: Benoit Gagnon Date: Fri, 1 May 2020 12:38:08 -0400 Subject: [PATCH 2/3] add test coverage for local package installs --- pkg/local_test.go | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 pkg/local_test.go diff --git a/pkg/local_test.go b/pkg/local_test.go new file mode 100644 index 0000000..7e857ef --- /dev/null +++ b/pkg/local_test.go @@ -0,0 +1,73 @@ +package pkg + +import ( + "context" + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jsonnet-bundler/jsonnet-bundler/spec/v1/deps" +) + +func TestLocalInstall(t *testing.T) { + cwd, err := os.Getwd() + assert.NoError(t, err) + + vendorDir, err := ioutil.TempDir(cwd, "vendor") + assert.NoError(t, err) + defer os.RemoveAll(vendorDir) + + pkgDir, err := ioutil.TempDir(cwd, "foo") + assert.NoError(t, err) + defer os.RemoveAll(pkgDir) + + relPath, err := filepath.Rel(cwd, pkgDir) + assert.NoError(t, err) + + p := NewLocalPackage(&deps.Local{Directory: relPath}) + lockVersion, err := p.Install(context.TODO(), "foo", vendorDir, "v1.0") + assert.NoError(t, err) + assert.Empty(t, lockVersion) +} + +func TestLocalInstallSourceNotFound(t *testing.T) { + cwd, err := os.Getwd() + assert.NoError(t, err) + + vendorDir, err := ioutil.TempDir(cwd, "vendor") + assert.NoError(t, err) + defer os.RemoveAll(vendorDir) + + relPath := "foo" + p := NewLocalPackage(&deps.Local{Directory: relPath}) + lockVersion, err := p.Install(context.TODO(), "foo", vendorDir, "v1.0") + assert.Error(t, err) + assert.Empty(t, lockVersion) +} + +func TestLocalInstallTargetDoesNotExist(t *testing.T) { + cwd, err := os.Getwd() + assert.NoError(t, err) + + pkgDir, err := ioutil.TempDir(cwd, "foo") + assert.NoError(t, err) + defer os.RemoveAll(pkgDir) + + relPath, err := filepath.Rel(cwd, pkgDir) + assert.NoError(t, err) + + p := NewLocalPackage(&deps.Local{Directory: relPath}) + lockVersion, err := p.Install(context.TODO(), "foo", "vendor", "v1.0") + assert.Error(t, err) + assert.Empty(t, lockVersion) +} + +func TestLocalInstallSourceAndTargetDoNotExist(t *testing.T) { + p := NewLocalPackage(&deps.Local{Directory: "foo"}) + lockVersion, err := p.Install(context.TODO(), "foo", "bar", "v1.0") + assert.Error(t, err) + assert.Empty(t, lockVersion) +} From 9d24e141dbf9b69365f0a5d7426b6a60428a90da Mon Sep 17 00:00:00 2001 From: Benoit Gagnon Date: Fri, 1 May 2020 12:46:42 -0400 Subject: [PATCH 3/3] rename "vendorDir" variable to "jsonnetPkgHomeDir" this better matches the terminology used for the config flag --- cmd/jb/install.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/jb/install.go b/cmd/jb/install.go index b742de9..9a7ce6c 100644 --- a/cmd/jb/install.go +++ b/cmd/jb/install.go @@ -72,8 +72,8 @@ func installCommand(dir, jsonnetHome string, uris []string, single bool) int { } } - vendorDir := filepath.Join(dir, jsonnetHome) - locked, err := pkg.Ensure(jsonnetFile, vendorDir, lockFile.Dependencies) + jsonnetPkgHomeDir := filepath.Join(dir, jsonnetHome) + locked, err := pkg.Ensure(jsonnetFile, jsonnetPkgHomeDir, lockFile.Dependencies) kingpin.FatalIfError(err, "failed to install packages") pkg.CleanLegacyName(jsonnetFile.Dependencies)