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 ( import (
"bytes" "bytes"
"context" "context"
"fmt"
"io/ioutil"
"os" "os"
"os/exec" "os/exec"
"path" "path"
"path/filepath"
"strings" "strings"
"github.com/jsonnet-bundler/jsonnet-bundler/spec" "github.com/jsonnet-bundler/jsonnet-bundler/spec"
"github.com/pkg/errors"
) )
type GitPackage struct { 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) { func (p *GitPackage) Install(ctx context.Context, name, dir, version string) (string, error) {
cmd := exec.CommandContext(ctx, "git", "clone", p.Source.Remote, dir) 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.Stdin = os.Stdin
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
@ -49,7 +61,7 @@ func (p *GitPackage) Install(ctx context.Context, dir, version string) (lockVers
cmd.Stdin = os.Stdin cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
cmd.Dir = dir cmd.Dir = tmpDir
err = cmd.Run() err = cmd.Run()
if err != nil { if err != nil {
return "", err return "", err
@ -58,7 +70,7 @@ func (p *GitPackage) Install(ctx context.Context, dir, version string) (lockVers
b := bytes.NewBuffer(nil) b := bytes.NewBuffer(nil)
cmd = exec.CommandContext(ctx, "git", "rev-parse", "HEAD") cmd = exec.CommandContext(ctx, "git", "rev-parse", "HEAD")
cmd.Stdout = b cmd.Stdout = b
cmd.Dir = dir cmd.Dir = tmpDir
err = cmd.Run() err = cmd.Run()
if err != nil { if err != nil {
return "", err return "", err
@ -66,10 +78,25 @@ func (p *GitPackage) Install(ctx context.Context, dir, version string) (lockVers
commitHash := strings.TrimSpace(b.String()) commitHash := strings.TrimSpace(b.String())
err = os.RemoveAll(path.Join(dir, ".git")) err = os.RemoveAll(path.Join(tmpDir, ".git"))
if err != nil { if err != nil {
return "", err 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 return commitHash, nil
} }

View file

@ -19,5 +19,5 @@ import (
) )
type Interface interface { 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 ( import (
"context" "context"
"fmt" "fmt"
"os"
"path/filepath"
"github.com/jsonnet-bundler/jsonnet-bundler/spec" "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) { func (p *LocalPackage) Install(ctx context.Context, name, dir, version string) (lockVersion string, err error) {
fmt.Println("SYMLINK THIS SHIT, HAHA") 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? err = os.Symlink(filepath.Join(wd, p.Source.Directory), filepath.Join(wd, dir, name))
if err != nil {
fmt.Println(ctx, dir, version) return "", fmt.Errorf("failed to create symlink for local dependency: %v", err)
}
return "", nil return "", nil
} }

View file

@ -18,7 +18,6 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/ioutil"
"os" "os"
"path" "path"
"path/filepath" "path/filepath"
@ -42,23 +41,16 @@ func Install(ctx context.Context, isLock bool, dependencySourceIdentifier string
if err != nil { if err != nil {
return nil, errors.Wrap(err, "failed to create general tmp dir") 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 var p Interface
if dep.Source.GitSource != nil { if dep.Source.GitSource != nil {
p = NewGitPackage(dep.Source.GitSource) p = NewGitPackage(dep.Source.GitSource)
subdir = dep.Source.GitSource.Subdir
} }
if dep.Source.LocalSource != nil { if dep.Source.LocalSource != nil {
p = NewLocalPackage(dep.Source.LocalSource) 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 { if err != nil {
return nil, errors.Wrap(err, "failed to install package") 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) 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{ lockfile.Dependencies, err = insertDependency(lockfile.Dependencies, spec.Dependency{
Name: dep.Name, Name: dep.Name,
Source: dep.Source, Source: dep.Source,