if no changes are made on edit templates then abort edit

This commit is contained in:
Cory Bennett
2015-09-11 22:04:02 -07:00
parent 0ede380834
commit e69b65cd7d
2 changed files with 38 additions and 6 deletions
+15 -1
View File
@@ -196,7 +196,7 @@ func (c *Cli) getTemplate(name string) string {
} else { } else {
return readFile(file) return readFile(file)
} }
} }
return all_templates[name] return all_templates[name]
} else { } else {
return readFile(file) return readFile(file)
@@ -222,6 +222,9 @@ func (c *Cli) editTemplate(template string, tmpFilePrefix string, templateData m
log.Error("Failed to rename %s to %s: %s", fh.Name(), fmt.Sprintf("%s.yml", fh.Name()), err) log.Error("Failed to rename %s to %s: %s", fh.Name(), fmt.Sprintf("%s.yml", fh.Name()), err)
return err return err
} }
defer func() {
os.Remove(tmpFileName)
}()
err = runTemplate(template, templateData, fh) err = runTemplate(template, templateData, fh)
if err != nil { if err != nil {
@@ -246,6 +249,12 @@ func (c *Cli) editTemplate(template string, tmpFilePrefix string, templateData m
editing = false editing = false
} }
tmpFileNameOrig := fmt.Sprintf("%s-orig")
copyFile(tmpFileName,tmpFileNameOrig)
defer func() {
os.Remove(tmpFileNameOrig)
}()
for true { for true {
if editing { if editing {
shell, _ := shellquote.Split(editor) shell, _ := shellquote.Split(editor)
@@ -260,6 +269,11 @@ func (c *Cli) editTemplate(template string, tmpFilePrefix string, templateData m
} }
return err return err
} }
diff := exec.Command("diff", "-q", tmpFileNameOrig, tmpFileName)
if err := diff.Run(); err == nil {
log.Info("No changes found, aborting")
return fmt.Errorf("No changes found, aborting")
}
} }
edited := make(map[string]interface{}) edited := make(map[string]interface{})
+23 -5
View File
@@ -63,6 +63,22 @@ func readFile(file string) string {
return string(bytes) return string(bytes)
} }
func copyFile(src, dst string) (err error){
var s, d *os.File;
if s, err = os.Open(src); err == nil {
defer s.Close()
if d, err = os.Create(dst); err == nil {
if _, err = io.Copy(d, s); err != nil {
d.Close()
return
}
return d.Close()
}
}
return
}
func fuzzyAge(start string) (string, error) { func fuzzyAge(start string) (string, error) {
if t, err := time.Parse("2006-01-02T15:04:05.000-0700", start); err != nil { if t, err := time.Parse("2006-01-02T15:04:05.000-0700", start); err != nil {
return "", err return "", err
@@ -246,23 +262,25 @@ func yamlFixup(data interface{}) (interface{}, error) {
} }
return copy, nil return copy, nil
case map[string]interface{}: case map[string]interface{}:
copy := make(map[string]interface{})
for k, v := range d { for k, v := range d {
if fixed, err := yamlFixup(v); err != nil { if fixed, err := yamlFixup(v); err != nil {
return nil, err return nil, err
} else if fixed != nil { } else if fixed != nil {
d[k] = fixed copy[k] = fixed
} }
} }
return d, nil return copy, nil
case []interface{}: case []interface{}:
for i, val := range d { copy := make([]interface{}, 0, len(d))
for _, val := range d {
if fixed, err := yamlFixup(val); err != nil { if fixed, err := yamlFixup(val); err != nil {
return nil, err return nil, err
} else if fixed != nil { } else if fixed != nil {
d[i] = fixed copy = append(copy, fixed)
} }
} }
return data, nil return copy, nil
case string: case string:
if d == "" { if d == "" {
return nil, nil return nil, nil