From e4dcc3e11612af36308ee32cf90d891e36924c66 Mon Sep 17 00:00:00 2001 From: Matthias Loibl Date: Tue, 23 Jul 2019 15:07:35 -0700 Subject: [PATCH] Refactor git deps install and make local deps install work --- pkg/git.go | 37 ++++++++++++++++++++++++++++++++----- pkg/interface.go | 2 +- pkg/local.go | 16 +++++++++++----- pkg/packages.go | 24 +----------------------- 4 files changed, 45 insertions(+), 34 deletions(-) diff --git a/pkg/git.go b/pkg/git.go index d2cd6f3..8af4a00 100644 --- a/pkg/git.go +++ b/pkg/git.go @@ -17,12 +17,16 @@ package pkg import ( "bytes" "context" + "fmt" + "io/ioutil" "os" "os/exec" "path" + "path/filepath" "strings" "github.com/jsonnet-bundler/jsonnet-bundler/spec" + "github.com/pkg/errors" ) type GitPackage struct { @@ -35,8 +39,16 @@ func NewGitPackage(source *spec.GitSource) Interface { } } -func (p *GitPackage) Install(ctx context.Context, dir, version string) (lockVersion string, err error) { - cmd := exec.CommandContext(ctx, "git", "clone", p.Source.Remote, dir) +func (p *GitPackage) Install(ctx context.Context, name, dir, version string) (string, error) { + destPath := path.Join(dir, name) + + tmpDir, err := ioutil.TempDir(filepath.Join(dir, ".tmp"), fmt.Sprintf("jsonnetpkg-%s-%s", name, version)) + if err != nil { + return "", errors.Wrap(err, "failed to create tmp dir") + } + defer os.RemoveAll(tmpDir) + + cmd := exec.CommandContext(ctx, "git", "clone", p.Source.Remote, tmpDir) cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr @@ -49,7 +61,7 @@ func (p *GitPackage) Install(ctx context.Context, dir, version string) (lockVers cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr - cmd.Dir = dir + cmd.Dir = tmpDir err = cmd.Run() if err != nil { return "", err @@ -58,7 +70,7 @@ func (p *GitPackage) Install(ctx context.Context, dir, version string) (lockVers b := bytes.NewBuffer(nil) cmd = exec.CommandContext(ctx, "git", "rev-parse", "HEAD") cmd.Stdout = b - cmd.Dir = dir + cmd.Dir = tmpDir err = cmd.Run() if err != nil { return "", err @@ -66,10 +78,25 @@ func (p *GitPackage) Install(ctx context.Context, dir, version string) (lockVers commitHash := strings.TrimSpace(b.String()) - err = os.RemoveAll(path.Join(dir, ".git")) + err = os.RemoveAll(path.Join(tmpDir, ".git")) if err != nil { return "", err } + err = os.MkdirAll(path.Dir(destPath), os.ModePerm) + if err != nil { + return "", errors.Wrap(err, "failed to create parent path") + } + + err = os.RemoveAll(destPath) + if err != nil { + return "", errors.Wrap(err, "failed to clean previous destination path") + } + + err = os.Rename(path.Join(tmpDir, p.Source.Subdir), destPath) + if err != nil { + return "", errors.Wrap(err, "failed to move package") + } + return commitHash, nil } diff --git a/pkg/interface.go b/pkg/interface.go index 79384af..a93911c 100644 --- a/pkg/interface.go +++ b/pkg/interface.go @@ -19,5 +19,5 @@ import ( ) type Interface interface { - Install(ctx context.Context, dir, version string) (lockVersion string, err error) + Install(ctx context.Context, name, dir, version string) (lockVersion string, err error) } diff --git a/pkg/local.go b/pkg/local.go index d3aedbc..06c2dd1 100644 --- a/pkg/local.go +++ b/pkg/local.go @@ -17,6 +17,8 @@ package pkg import ( "context" "fmt" + "os" + "path/filepath" "github.com/jsonnet-bundler/jsonnet-bundler/spec" ) @@ -31,12 +33,16 @@ func NewLocalPackage(source *spec.LocalSource) Interface { } } -func (p *LocalPackage) Install(ctx context.Context, dir, version string) (lockVersion string, err error) { - fmt.Println("SYMLINK THIS SHIT, HAHA") +func (p *LocalPackage) Install(ctx context.Context, name, dir, version string) (lockVersion string, err error) { + wd, err := os.Getwd() + if err != nil { + return "", fmt.Errorf("failed to get current working directory: %v", err) + } - // TODO: Where do I get the name of the package? - - fmt.Println(ctx, dir, version) + err = os.Symlink(filepath.Join(wd, p.Source.Directory), filepath.Join(wd, dir, name)) + if err != nil { + return "", fmt.Errorf("failed to create symlink for local dependency: %v", err) + } return "", nil } diff --git a/pkg/packages.go b/pkg/packages.go index 3c7a70a..a5b1494 100644 --- a/pkg/packages.go +++ b/pkg/packages.go @@ -18,7 +18,6 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" "os" "path" "path/filepath" @@ -42,23 +41,16 @@ func Install(ctx context.Context, isLock bool, dependencySourceIdentifier string if err != nil { return nil, errors.Wrap(err, "failed to create general tmp dir") } - tmpDir, err := ioutil.TempDir(tmp, fmt.Sprintf("jsonnetpkg-%s-%s", dep.Name, dep.Version)) - if err != nil { - return nil, errors.Wrap(err, "failed to create tmp dir") - } - defer os.RemoveAll(tmpDir) - subdir := "" var p Interface if dep.Source.GitSource != nil { p = NewGitPackage(dep.Source.GitSource) - subdir = dep.Source.GitSource.Subdir } if dep.Source.LocalSource != nil { p = NewLocalPackage(dep.Source.LocalSource) } - lockVersion, err := p.Install(ctx, tmpDir, dep.Version) + lockVersion, err := p.Install(ctx, dep.Name, dir, dep.Version) if err != nil { return nil, errors.Wrap(err, "failed to install package") } @@ -67,20 +59,6 @@ func Install(ctx context.Context, isLock bool, dependencySourceIdentifier string destPath := path.Join(dir, dep.Name) - err = os.MkdirAll(path.Dir(destPath), os.ModePerm) - if err != nil { - return nil, errors.Wrap(err, "failed to create parent path") - } - - err = os.RemoveAll(destPath) - if err != nil { - return nil, errors.Wrap(err, "failed to clean previous destination path") - } - err = os.Rename(path.Join(tmpDir, subdir), destPath) - if err != nil { - return nil, errors.Wrap(err, "failed to move package") - } - lockfile.Dependencies, err = insertDependency(lockfile.Dependencies, spec.Dependency{ Name: dep.Name, Source: dep.Source,