only write jsonnnet files if we made changes (#56)

Adding a dep, or updating a dependency version makes writes to the
jsonnet files.

We evaluate the changes on each of the files. An empty jsonnetfile.json
does not create a corresponding lockfile, as a missing lockfile is not
different from its previous (non existent).
This commit is contained in:
David Genest 2019-11-08 09:36:13 -05:00 committed by sh0rez
parent 7fc7c31856
commit f4417ac665
3 changed files with 124 additions and 12 deletions

View file

@ -34,14 +34,20 @@ func installCommand(dir, jsonnetHome string, uris []string) int {
dir = "."
}
jsonnetFile, err := jsonnetfile.Load(filepath.Join(dir, jsonnetfile.File))
jbfilebytes, err := ioutil.ReadFile(filepath.Join(dir, jsonnetfile.File))
kingpin.FatalIfError(err, "failed to load jsonnetfile")
lockFile, err := jsonnetfile.Load(filepath.Join(dir, jsonnetfile.LockFile))
jsonnetFile, err := jsonnetfile.Unmarshal(jbfilebytes)
kingpin.FatalIfError(err, "")
jblockfilebytes, err := ioutil.ReadFile(filepath.Join(dir, jsonnetfile.LockFile))
if !os.IsNotExist(err) {
kingpin.FatalIfError(err, "failed to load lockfile")
}
lockFile, err := jsonnetfile.Unmarshal(jblockfilebytes)
kingpin.FatalIfError(err, "")
kingpin.FatalIfError(
os.MkdirAll(filepath.Join(dir, jsonnetHome, ".tmp"), os.ModePerm),
"creating vendor folder")
@ -65,10 +71,11 @@ func installCommand(dir, jsonnetHome string, uris []string) int {
kingpin.FatalIfError(err, "failed to install packages")
kingpin.FatalIfError(
writeJSONFile(filepath.Join(dir, jsonnetfile.File), jsonnetFile),
writeChangedJsonnetFile(jbfilebytes, &jsonnetFile, filepath.Join(dir, jsonnetfile.File)),
"updating jsonnetfile.json")
kingpin.FatalIfError(
writeJSONFile(filepath.Join(dir, jsonnetfile.LockFile), spec.JsonnetFile{Dependencies: locked}),
writeChangedJsonnetFile(jblockfilebytes, &spec.JsonnetFile{Dependencies: locked}, filepath.Join(dir, jsonnetfile.LockFile)),
"updating jsonnetfile.lock.json")
return 0
@ -91,3 +98,16 @@ func writeJSONFile(name string, d interface{}) error {
return ioutil.WriteFile(name, b, 0644)
}
func writeChangedJsonnetFile(originalBytes []byte, modified *spec.JsonnetFile, path string) error {
origJsonnetFile, err := jsonnetfile.Unmarshal(originalBytes)
if err != nil {
return err
}
if reflect.DeepEqual(origJsonnetFile, *modified) {
return nil
}
return writeJSONFile(path, *modified)
}