scp to a temporary file first.
authorCarl Hetherington <cth@carlh.net>
Wed, 28 Mar 2018 00:18:26 +0000 (01:18 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 28 Mar 2018 00:18:26 +0000 (01:18 +0100)
cdist

diff --git a/cdist b/cdist
index 1c7433699597e0e18117182a59b820116ed32d66..fbec567947d9575c8ba860c6a0d8e4cec81ba391 100755 (executable)
--- a/cdist
+++ b/cdist
@@ -173,7 +173,15 @@ def copyfile(a, b):
     if b.startswith('s3://'):
         command('s3cmd -P put "%s" "%s"' % (a, b))
     else:
-        command('scp %s %s' % (scp_escape(a), scp_escape(b)))
+        bc = b.find(":")
+        if bc != -1:
+            host = b[:bc]
+            path = b[bc+1:]
+            temp_path = os.path.join(os.path.dirname(path), ".tmp." + os.path.basename(path))
+            command('scp %s %s:%s' % (scp_escape(a), host, scp_escape(temp_path)))
+            command('ssh %s -- mv %s %s' % (host, scp_escape(temp_path), scp_escape(path)))
+        else:
+            command('scp %s %s' % (scp_escape(a), scp_escape(b)))
 
 def makedirs(d):
     """