summary refs log tree commit diff
diff options
context:
space:
mode:
authorJaime Marquínez Ferrándiz <jaimeMF@users.noreply.github.com>2014-11-20 08:16:42 +0100
committerJaime Marquínez Ferrándiz <jaimeMF@users.noreply.github.com>2014-11-20 08:16:42 +0100
commit3ba098a6a5cfba528b3931c38790b582494031f8 (patch)
tree5f58d06f15d31a8e7b522401a3ed1c30ca06c7e1
parent07e378fa18b1c6b8becd46f6cf2d476e29a70a59 (diff)
parent1394646a0a531f6b13a4af7b1e3eec9951a6f9fb (diff)
downloadyoutube-dl-3ba098a6a5cfba528b3931c38790b582494031f8.tar.gz
youtube-dl-3ba098a6a5cfba528b3931c38790b582494031f8.tar.xz
youtube-dl-3ba098a6a5cfba528b3931c38790b582494031f8.zip
Merge pull request #4247 from ivan/info-json
Fix #4246 and #4244 .info.json bugs
-rw-r--r--youtube_dl/utils.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index 94b496dd0..bfe88b40b 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -71,10 +71,10 @@ def preferredencoding():
 
 
 def write_json_file(obj, fn):
-    """ Encode obj as JSON and write it to fn, atomically """
+    """ Encode obj as JSON and write it to fn, atomically if possible """
 
     fn = encodeFilename(fn)
-    if sys.version_info < (3, 0):
+    if sys.version_info < (3, 0) and sys.platform != 'win32':
         encoding = get_filesystem_encoding()
         # os.path.basename returns a bytes object, but NamedTemporaryFile
         # will fail if the filename contains non ascii characters unless we
@@ -108,6 +108,13 @@ def write_json_file(obj, fn):
     try:
         with tf:
             json.dump(obj, tf)
+        if sys.platform == 'win32':
+            # Need to remove existing file on Windows, else os.rename raises
+            # WindowsError or FileExistsError.
+            try:
+                os.unlink(fn)
+            except OSError:
+                pass
         os.rename(tf.name, fn)
     except:
         try: