From 35b10d3381fab0cf43fa0a42b2a2fd4204a03288 Mon Sep 17 00:00:00 2001 From: Frederic Branczyk Date: Fri, 29 Jun 2018 14:29:48 +0200 Subject: [PATCH] Add update command --- README.md | 3 +++ cmd/jb/main.go | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/README.md b/README.md index abd974d..971ce75 100644 --- a/README.md +++ b/README.md @@ -36,5 +36,8 @@ Commands: install [...] Install all dependencies or install specific ones + update + Update all dependencies. + ``` diff --git a/cmd/jb/main.go b/cmd/jb/main.go index 24852ab..49ff58f 100644 --- a/cmd/jb/main.go +++ b/cmd/jb/main.go @@ -35,6 +35,7 @@ import ( const ( installActionName = "install" + updateActionName = "update" initActionName = "init" basePath = ".jsonnetpkg" srcDirName = "src" @@ -76,6 +77,8 @@ func Main() int { installCmd := a.Command(installActionName, "Install all dependencies or install specific ones") installCmdURLs := installCmd.Arg("packages", "URLs to package to install").URLList() + updateCmd := a.Command(updateActionName, "Update all dependencies.") + command, err := a.Parse(os.Args[1:]) if err != nil { fmt.Fprintln(os.Stderr, errors.Wrapf(err, "Error parsing commandline arguments")) @@ -88,6 +91,8 @@ func Main() int { return initCommand() case installCmd.FullCommand(): return installCommand(cfg.JsonnetHome, *installCmdURLs...) + case updateCmd.FullCommand(): + return updateCommand(cfg.JsonnetHome) default: installCommand(cfg.JsonnetHome) } @@ -318,3 +323,39 @@ func installCommand(jsonnetHome string, urls ...*url.URL) int { return 0 } + +func updateCommand(jsonnetHome string, urls ...*url.URL) int { + jsonnetfile := pkg.JsonnetFile + + m, err := pkg.LoadJsonnetfile(jsonnetfile) + if err != nil { + kingpin.Fatalf("failed to load jsonnetfile: %v", err) + return 1 + } + + err = os.MkdirAll(jsonnetHome, os.ModePerm) + if err != nil { + kingpin.Fatalf("failed to create jsonnet home path: %v", err) + return 3 + } + + lock, err := pkg.Install(context.TODO(), jsonnetfile, m, jsonnetHome) + if err != nil { + kingpin.Fatalf("failed to install: %v", err) + return 3 + } + + b, err := json.MarshalIndent(lock, "", " ") + if err != nil { + kingpin.Fatalf("failed to encode jsonnet file: %v", err) + return 3 + } + + err = ioutil.WriteFile(pkg.JsonnetLockFile, b, 0644) + if err != nil { + kingpin.Fatalf("failed to write lock file: %v", err) + return 3 + } + + return 0 +}