projects
/
youtube-dl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into rtmpdump
[youtube-dl]
/
youtube_dl
/
update.py
diff --git
a/youtube_dl/update.py
b/youtube_dl/update.py
index b446dd94c9741b3f20524d1908771e1ecfa62bef..f41b4785ae80a463fe7d4cd25cd5daaba46cb2e7 100644
(file)
--- a/
youtube_dl/update.py
+++ b/
youtube_dl/update.py
@@
-1,9
+1,16
@@
+import io
import json
import traceback
import hashlib
import json
import traceback
import hashlib
+import os
+import subprocess
+import sys
from zipimport import zipimporter
from zipimport import zipimporter
-from .utils import *
+from .utils import (
+ compat_str,
+ compat_urllib_request,
+)
from .version import __version__
def rsa_verify(message, signature, key):
from .version import __version__
def rsa_verify(message, signature, key):
@@
-34,17
+41,16
@@
def rsa_verify(message, signature, key):
if signature != sha256(message).digest(): return False
return True
if signature != sha256(message).digest(): return False
return True
-def update_self(to_screen, verbose
, filename
):
+def update_self(to_screen, verbose):
"""Update the program file with the latest version from the repository"""
"""Update the program file with the latest version from the repository"""
- UPDATE_URL = "http://rg3.github.
com
/youtube-dl/update/"
+ UPDATE_URL = "http://rg3.github.
io
/youtube-dl/update/"
VERSION_URL = UPDATE_URL + 'LATEST_VERSION'
JSON_URL = UPDATE_URL + 'versions.json'
UPDATES_RSA_KEY = (0x9d60ee4d8f805312fdb15a62f87b95bd66177b91df176765d13514a0f1754bcd2057295c5b6f1d35daa6742c3ffc9a82d3e118861c207995a8031e151d863c9927e304576bc80692bc8e094896fcf11b66f3e29e04e3a71e9a11558558acea1840aec37fc396fb6b65dc81a1c4144e03bd1c011de62e3f1357b327d08426fe93, 65537)
VERSION_URL = UPDATE_URL + 'LATEST_VERSION'
JSON_URL = UPDATE_URL + 'versions.json'
UPDATES_RSA_KEY = (0x9d60ee4d8f805312fdb15a62f87b95bd66177b91df176765d13514a0f1754bcd2057295c5b6f1d35daa6742c3ffc9a82d3e118861c207995a8031e151d863c9927e304576bc80692bc8e094896fcf11b66f3e29e04e3a71e9a11558558acea1840aec37fc396fb6b65dc81a1c4144e03bd1c011de62e3f1357b327d08426fe93, 65537)
-
if not isinstance(globals().get('__loader__'), zipimporter) and not hasattr(sys, "frozen"):
if not isinstance(globals().get('__loader__'), zipimporter) and not hasattr(sys, "frozen"):
- to_screen(u'It looks like you installed youtube-dl with pip, setup.py or a tarball. Please use that to update.')
+ to_screen(u'It looks like you installed youtube-dl with
a package manager,
pip, setup.py or a tarball. Please use that to update.')
return
# Check if there is a new version
return
# Check if there is a new version
@@
-75,10
+81,17
@@
def update_self(to_screen, verbose, filename):
to_screen(u'ERROR: the versions file signature is invalid. Aborting.')
return
to_screen(u'ERROR: the versions file signature is invalid. Aborting.')
return
- to_screen(u'Updating to version ' + versions_info['latest'] + '...')
- version = versions_info['versions'][versions_info['latest']]
+ version_id = versions_info['latest']
+ to_screen(u'Updating to version ' + version_id + '...')
+ version = versions_info['versions'][version_id]
+
+ print_notes(to_screen, versions_info['versions'])
- print_notes(versions_info['versions'])
+ filename = sys.argv[0]
+ # Py2EXE: Filename could be different
+ if hasattr(sys, "frozen") and not os.path.isfile(filename):
+ if os.path.isfile(filename + u'.exe'):
+ filename += u'.exe'
if not os.access(filename, os.W_OK):
to_screen(u'ERROR: no write permissions on %s' % filename)
if not os.access(filename, os.W_OK):
to_screen(u'ERROR: no write permissions on %s' % filename)
@@
-116,16
+129,18
@@
def update_self(to_screen, verbose, filename):
try:
bat = os.path.join(directory, 'youtube-dl-updater.bat')
try:
bat = os.path.join(directory, 'youtube-dl-updater.bat')
- b = open(bat, 'w')
- b.write("""
-echo Updating youtube-dl...
+ with io.open(bat, 'w') as batfile:
+ batfile.write(u"""
+@echo off
+echo Waiting for file handle to be closed ...
ping 127.0.0.1 -n 5 -w 1000 > NUL
ping 127.0.0.1 -n 5 -w 1000 > NUL
-move /Y "%s.new" "%s"
-del "%s"
- \n""" %(exe, exe, bat))
-
b.close(
)
+move /Y "%s.new" "%s"
> NUL
+echo Updated youtube-dl to version %s.
+start /b "" cmd /c del "%%~f0"&exit /b"
+
\n""" % (exe, exe, version_id)
)
- os.startfile(bat)
+ subprocess.Popen([bat]) # Continues to run in the background
+ return # Do not show premature success messages
except (IOError, OSError) as err:
if verbose: to_screen(compat_str(traceback.format_exc()))
to_screen(u'ERROR: unable to overwrite current version')
except (IOError, OSError) as err:
if verbose: to_screen(compat_str(traceback.format_exc()))
to_screen(u'ERROR: unable to overwrite current version')
@@
-157,11
+172,15
@@
del "%s"
to_screen(u'Updated youtube-dl. Restart youtube-dl to use the new version.')
to_screen(u'Updated youtube-dl. Restart youtube-dl to use the new version.')
-def
print_notes(versions, fromVersion=__version__
):
+def
get_notes(versions, fromVersion
):
notes = []
for v,vdata in sorted(versions.items()):
if v > fromVersion:
notes.extend(vdata.get('notes', []))
notes = []
for v,vdata in sorted(versions.items()):
if v > fromVersion:
notes.extend(vdata.get('notes', []))
+ return notes
+
+def print_notes(to_screen, versions, fromVersion=__version__):
+ notes = get_notes(versions, fromVersion)
if notes:
to_screen(u'PLEASE NOTE:')
for note in notes:
if notes:
to_screen(u'PLEASE NOTE:')
for note in notes: