github.com/Cloud-Foundations/Dominator@v0.3.4/cmd/imagetool/diffFileInImages.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io" 6 "io/ioutil" 7 "os" 8 "os/exec" 9 10 "github.com/Cloud-Foundations/Dominator/lib/log" 11 ) 12 13 func diffFileInImagesSubcommand(args []string, 14 logger log.DebugLogger) error { 15 err := diffFileInImages(args[0], args[1], args[2], args[3]) 16 if err != nil { 17 return fmt.Errorf("error diffing files: %s", err) 18 } 19 return nil 20 } 21 22 func diffFileInImages(tool, leftName, rightName, filename string) error { 23 leftReader, err := getTypedFileReader(leftName, filename) 24 if err != nil { 25 return err 26 } 27 leftFile, err := copyToTempfile(leftReader) 28 leftReader.Close() 29 if err != nil { 30 return err 31 } 32 defer os.Remove(leftFile) 33 rightReader, err := getTypedFileReader(rightName, filename) 34 if err != nil { 35 return err 36 } 37 rightFile, err := copyToTempfile(rightReader) 38 rightReader.Close() 39 if err != nil { 40 return err 41 } 42 defer os.Remove(rightFile) 43 cmd := exec.Command(tool, leftFile, rightFile) 44 cmd.Stdout = os.Stdout 45 return cmd.Run() 46 } 47 48 func copyToTempfile(reader io.Reader) (string, error) { 49 file, err := ioutil.TempFile("", "imagetool-diff") 50 if err != nil { 51 return "", err 52 } 53 if _, err := io.Copy(file, reader); err != nil { 54 return "", err 55 } 56 return file.Name(), nil 57 }