Refactor git deps install and make local deps install work

This commit is contained in:
Matthias Loibl 2019-07-23 15:07:35 -07:00
parent 07801936c0
commit e4dcc3e116
No known key found for this signature in database
GPG key ID: 78A796CA74CA38BA
4 changed files with 45 additions and 34 deletions

View file

@ -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
}

View file

@ -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)
}

View file

@ -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
}

View file

@ -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,