communicator/ssh: upload proper source [GH-1484]

This commit is contained in:
Mitchell Hashimoto 2014-09-10 14:16:24 -07:00
parent 42e9e734b9
commit cc16e19a6b
2 changed files with 13 additions and 12 deletions

View File

@ -7,6 +7,7 @@ FEATURES:
BUG FIXES: BUG FIXES:
* core: SSH will connect slightly faster if it is ready immediately. * core: SSH will connect slightly faster if it is ready immediately.
* provisioner/file: directory uploads no longer hang. [GH-1484]
* scripts: Windows executable renamed to packer.exe. [GH-1483] * scripts: Windows executable renamed to packer.exe. [GH-1483]
## 0.7.0 (September 8, 2014) ## 0.7.0 (September 8, 2014)

View File

@ -333,6 +333,13 @@ func checkSCPStatus(r *bufio.Reader) error {
} }
func scpUploadFile(dst string, src io.Reader, w io.Writer, r *bufio.Reader, fi *os.FileInfo) error { func scpUploadFile(dst string, src io.Reader, w io.Writer, r *bufio.Reader, fi *os.FileInfo) error {
var mode os.FileMode
var size int64
if fi != nil {
mode = (*fi).Mode().Perm()
size = (*fi).Size()
} else {
// Create a temporary file where we can copy the contents of the src // Create a temporary file where we can copy the contents of the src
// so that we can determine the length, since SCP is length-prefixed. // so that we can determine the length, since SCP is length-prefixed.
tf, err := ioutil.TempFile("", "packer-upload") tf, err := ioutil.TempFile("", "packer-upload")
@ -342,13 +349,6 @@ func scpUploadFile(dst string, src io.Reader, w io.Writer, r *bufio.Reader, fi *
defer os.Remove(tf.Name()) defer os.Remove(tf.Name())
defer tf.Close() defer tf.Close()
var mode os.FileMode
var size int64
if fi != nil {
mode = (*fi).Mode().Perm()
size = (*fi).Size()
} else {
mode = 0644 mode = 0644
log.Println("Copying input data into temporary file so we can read the length") log.Println("Copying input data into temporary file so we can read the length")
@ -373,19 +373,19 @@ func scpUploadFile(dst string, src io.Reader, w io.Writer, r *bufio.Reader, fi *
} }
size = tfi.Size() size = tfi.Size()
src = tf
} }
// Start the protocol // Start the protocol
log.Println("Beginning file upload...")
perms := fmt.Sprintf("C%04o", mode) perms := fmt.Sprintf("C%04o", mode)
log.Printf("[DEBUG] Uploading %s: perms=%s size=%d", dst, perms, size)
fmt.Fprintln(w, perms, size, dst) fmt.Fprintln(w, perms, size, dst)
if err := checkSCPStatus(r); err != nil { if err := checkSCPStatus(r); err != nil {
return err return err
} }
if _, err := io.Copy(w, tf); err != nil { if _, err := io.CopyN(w, src, size); err != nil {
return err return err
} }