From 98b93287a2d4dc7a3017930ece3fd55fc47bb1a4 Mon Sep 17 00:00:00 2001 From: ChrisMcKenzie Date: Wed, 2 Dec 2015 19:42:54 -0800 Subject: [PATCH] minor bug fixes to file installer --- dropship/installer.go | 3 ++- dropship/installer_file.go | 10 +++++++--- dropship/installer_file_test.go | 10 +++++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/dropship/installer.go b/dropship/installer.go index 0868032..db0dfbe 100644 --- a/dropship/installer.go +++ b/dropship/installer.go @@ -4,6 +4,7 @@ import ( "io" "os" "path/filepath" + "strings" ) // Installer is an interface that allows different methods of writing @@ -13,7 +14,7 @@ type Installer interface { } func moveOld(dest string) error { - return os.Rename(dest, filepath.Join(dest, ".old")) + return os.Rename(dest, strings.Join([]string{dest, "old"}, ".")) } func cleanup(dest string, err error) error { diff --git a/dropship/installer_file.go b/dropship/installer_file.go index 0fc1114..6aa3363 100644 --- a/dropship/installer_file.go +++ b/dropship/installer_file.go @@ -10,9 +10,13 @@ import ( type FileInstaller struct{} func (i FileInstaller) Install(dest string, f io.Reader) (count int, err error) { - err = moveOld(dest) - if err != nil { - return 0, err + // if file exists lets move it so we can recover on failure + if _, err := os.Stat(dest); err == nil { + err = moveOld(dest) + if err != nil { + return 0, err + } + defer cleanup(dest, err) } if f == nil { diff --git a/dropship/installer_file_test.go b/dropship/installer_file_test.go index 9ba4ddc..a0892a4 100644 --- a/dropship/installer_file_test.go +++ b/dropship/installer_file_test.go @@ -3,6 +3,8 @@ package dropship import ( "bytes" "io" + "io/ioutil" + "os" "testing" ) @@ -21,7 +23,13 @@ func TestInstallFile(t *testing.T) { var fileInstaller FileInstaller for _, test := range cases { - count, err := fileInstaller.Install("/tmp/test.txt", test.file) + dir, err := ioutil.TempDir(".", "test") + if err != nil { + t.Error(err) + } + defer os.RemoveAll(dir) + + count, err := fileInstaller.Install(dir+"/test.txt", test.file) if err != test.err { t.Errorf("Install: Expected error to equal %v got: %v", test.err, err) }