diff --git a/cmd/jb/install.go b/cmd/jb/install.go index 31ab4ba..9a7ce6c 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) + jsonnetPkgHomeDir := filepath.Join(dir, jsonnetHome) + locked, err := pkg.Ensure(jsonnetFile, jsonnetPkgHomeDir, 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 } 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) +}