From 5fdb88b6f0182d0f80b2902cdff2b1265e89bb9c Mon Sep 17 00:00:00 2001 From: Matthias Loibl Date: Wed, 24 Apr 2019 18:04:53 +0200 Subject: [PATCH] Extract cmd/jb/install.go --- cmd/jb/install.go | 113 ++++++++++++++++++++++++++++++++++++++++++++++ cmd/jb/main.go | 96 --------------------------------------- 2 files changed, 113 insertions(+), 96 deletions(-) create mode 100644 cmd/jb/install.go diff --git a/cmd/jb/install.go b/cmd/jb/install.go new file mode 100644 index 0000000..f998a0f --- /dev/null +++ b/cmd/jb/install.go @@ -0,0 +1,113 @@ +package main + +import ( + "context" + "encoding/json" + "io/ioutil" + "net/url" + "os" + "path/filepath" + + "github.com/jsonnet-bundler/jsonnet-bundler/pkg" + "github.com/jsonnet-bundler/jsonnet-bundler/pkg/jsonnetfile" + "github.com/jsonnet-bundler/jsonnet-bundler/spec" + "gopkg.in/alecthomas/kingpin.v2" +) + +func installCommand(dir, jsonnetHome string, urls ...*url.URL) int { + if dir == "" { + dir = "." + } + + filename, isLock, err := jsonnetfile.Choose(dir) + if err != nil { + kingpin.Fatalf("failed to choose jsonnetfile: %v", err) + return 1 + } + + jsonnetFile, err := jsonnetfile.Load(filename) + if err != nil { + kingpin.Fatalf("failed to load jsonnetfile: %v", err) + return 1 + } + + if len(urls) > 0 { + for _, url := range urls { + // install package specified in command + // $ jsonnetpkg install ksonnet git@github.com:ksonnet/ksonnet-lib + // $ jsonnetpkg install grafonnet git@github.com:grafana/grafonnet-lib grafonnet + // $ jsonnetpkg install github.com/grafana/grafonnet-lib/grafonnet + // + // github.com/(slug)/(dir) + + urlString := url.String() + newDep := parseDepedency(urlString) + if newDep == nil { + kingpin.Errorf("ignoring unrecognized url: %s", url) + continue + } + + oldDeps := jsonnetFile.Dependencies + newDeps := []spec.Dependency{} + oldDepReplaced := false + for _, d := range oldDeps { + if d.Name == newDep.Name { + newDeps = append(newDeps, *newDep) + oldDepReplaced = true + } else { + newDeps = append(newDeps, d) + } + } + + if !oldDepReplaced { + newDeps = append(newDeps, *newDep) + } + + jsonnetFile.Dependencies = newDeps + } + } + + srcPath := filepath.Join(jsonnetHome) + err = os.MkdirAll(srcPath, os.ModePerm) + if err != nil { + kingpin.Fatalf("failed to create jsonnet home path: %v", err) + return 3 + } + + lock, err := pkg.Install(context.TODO(), isLock, filename, jsonnetFile, jsonnetHome) + if err != nil { + kingpin.Fatalf("failed to install: %v", err) + return 3 + } + + // If installing from lock file there is no need to write any files back. + if !isLock { + b, err := json.MarshalIndent(jsonnetFile, "", " ") + if err != nil { + kingpin.Fatalf("failed to encode jsonnet file: %v", err) + return 3 + } + b = append(b, []byte("\n")...) + + err = ioutil.WriteFile(filepath.Join(dir, jsonnetfile.File), b, 0644) + if err != nil { + kingpin.Fatalf("failed to write jsonnet file: %v", err) + return 3 + } + + b, err = json.MarshalIndent(lock, "", " ") + if err != nil { + kingpin.Fatalf("failed to encode jsonnet file: %v", err) + return 3 + } + b = append(b, []byte("\n")...) + + err = ioutil.WriteFile(filepath.Join(dir, jsonnetfile.LockFile), b, 0644) + if err != nil { + kingpin.Fatalf("failed to write lock file: %v", err) + return 3 + } + } + + return 0 +} diff --git a/cmd/jb/main.go b/cmd/jb/main.go index 69a918d..202e80e 100644 --- a/cmd/jb/main.go +++ b/cmd/jb/main.go @@ -234,102 +234,6 @@ func parseGithubDependency(urlString string) *spec.Dependency { } } -func installCommand(jsonnetHome string, urls ...*url.URL) int { - workdir := "." - - jsonnetfile, isLock, err := pkg.ChooseJsonnetFile(workdir) - if err != nil { - kingpin.Fatalf("failed to choose jsonnetfile: %v", err) - return 1 - } - - m, err := pkg.LoadJsonnetfile(jsonnetfile) - if err != nil { - kingpin.Fatalf("failed to load jsonnetfile: %v", err) - return 1 - } - - if len(urls) > 0 { - for _, url := range urls { - // install package specified in command - // $ jsonnetpkg install ksonnet git@github.com:ksonnet/ksonnet-lib - // $ jsonnetpkg install grafonnet git@github.com:grafana/grafonnet-lib grafonnet - // $ jsonnetpkg install github.com/grafana/grafonnet-lib/grafonnet - // - // github.com/(slug)/(dir) - - urlString := url.String() - newDep := parseDepedency(urlString) - if newDep == nil { - kingpin.Errorf("ignoring unrecognized url: %s", url) - continue - } - - oldDeps := m.Dependencies - newDeps := []spec.Dependency{} - oldDepReplaced := false - for _, d := range oldDeps { - if d.Name == newDep.Name { - newDeps = append(newDeps, *newDep) - oldDepReplaced = true - } else { - newDeps = append(newDeps, d) - } - } - - if !oldDepReplaced { - newDeps = append(newDeps, *newDep) - } - - m.Dependencies = newDeps - } - } - - srcPath := filepath.Join(jsonnetHome) - err = os.MkdirAll(srcPath, os.ModePerm) - if err != nil { - kingpin.Fatalf("failed to create jsonnet home path: %v", err) - return 3 - } - - lock, err := pkg.Install(context.TODO(), isLock, jsonnetfile, m, jsonnetHome) - if err != nil { - kingpin.Fatalf("failed to install: %v", err) - return 3 - } - - // If installing from lock file there is no need to write any files back. - if !isLock { - b, err := json.MarshalIndent(m, "", " ") - if err != nil { - kingpin.Fatalf("failed to encode jsonnet file: %v", err) - return 3 - } - b = append(b, []byte("\n")...) - - err = ioutil.WriteFile(pkg.JsonnetFile, b, 0644) - if err != nil { - kingpin.Fatalf("failed to write jsonnet file: %v", err) - return 3 - } - - b, err = json.MarshalIndent(lock, "", " ") - if err != nil { - kingpin.Fatalf("failed to encode jsonnet file: %v", err) - return 3 - } - b = append(b, []byte("\n")...) - - err = ioutil.WriteFile(pkg.JsonnetLockFile, b, 0644) - if err != nil { - kingpin.Fatalf("failed to write lock file: %v", err) - return 3 - } - } - - return 0 -} - func updateCommand(jsonnetHome string, urls ...*url.URL) int { jsonnetfile := pkg.JsonnetFile