corrected -U to support new zipfile and exe (#153) formats

This commit is contained in:
Filippo Valsorda 2012-03-31 01:19:30 +02:00
parent 303692b5ed
commit 53e893615d
4 changed files with 66 additions and 21 deletions

View File

@ -1,11 +1,12 @@
from distutils.core import setup from distutils.core import setup
import py2exe import py2exe
import sys import sys, os
# If run without args, build executables # If run without args, build executables
if len(sys.argv) == 1: if len(sys.argv) == 1:
sys.argv.append("py2exe") sys.argv.append("py2exe")
os.chdir(os.path.dirname(sys.argv[0]))
sys.path.append('./youtube_dl') sys.path.append('./youtube_dl')
options = { options = {
@ -21,10 +22,23 @@ console = [{
"dest_base": "youtube-dl", "dest_base": "youtube-dl",
}] }]
setup( init_file = open('./youtube_dl/__init__.py')
console = console, for line in init_file.readlines():
options = {"py2exe": options}, if line.startswith('__version__'):
zipfile = None, version = line[11:].strip(" ='\n")
break
else:
version = ''
setup(name='youtube-dl',
version=version,
description='Small command-line program to download videos from YouTube.com and other video sites',
url='https://github.com/rg3/youtube-dl',
packages=['youtube_dl'],
console = console,
options = {"py2exe": options},
zipfile = None,
) )
import shutil import shutil

Binary file not shown.

BIN
youtube-dl.exe Normal file

Binary file not shown.

View File

@ -22,6 +22,8 @@ __license__ = 'Public Domain'
__version__ = '2012.02.27' __version__ = '2012.02.27'
UPDATE_URL = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl' UPDATE_URL = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl'
UPDATE_URL_VERSION = 'https://raw.github.com/rg3/youtube-dl/master/LATEST_VERSION'
UPDATE_URL_EXE = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl.exe'
import cookielib import cookielib
@ -44,33 +46,62 @@ from PostProcessing import *
def updateSelf(downloader, filename): def updateSelf(downloader, filename):
''' Update the program file with the latest version from the repository ''' ''' Update the program file with the latest version from the repository '''
# Note: downloader only used for options # Note: downloader only used for options
if not os.access(filename, os.W_OK): if not os.access(filename, os.W_OK):
sys.exit('ERROR: no write permissions on %s' % filename) sys.exit('ERROR: no write permissions on %s' % filename)
downloader.to_screen(u'Updating to latest version...') downloader.to_screen(u'Updating to latest version...')
try: urlv = urllib2.urlopen(UPDATE_URL_VERSION)
newversion = urlv.read().strip()
if newversion == __version__:
downloader.to_screen(u'youtube-dl is up-to-date (' + __version__ + ')')
return
urlv.close()
if hasattr(sys, "frozen"): #py2exe
directory = os.path.dirname(filename)
exe = os.path.abspath(filename)
if not os.access(directory, os.W_OK):
sys.exit('ERROR: no write permissions on %s' % directory)
try:
urllib.urlretrieve(UPDATE_URL_EXE, exe + '.new')
except (IOError, OSError), err:
sys.exit('ERROR: unable to download latest version')
try:
bat = os.path.join(directory, 'youtube-dl-updater.bat')
b = open(bat, 'w')
print >> b, """
timeout /t 5 /nobreak
move /Y "%s.new" "%s"
del "%s"
""" %(exe, exe, bat)
b.close()
os.startfile(bat)
except (IOError, OSError), err:
sys.exit('ERROR: unable to overwrite current version')
else:
try: try:
urlh = urllib2.urlopen(UPDATE_URL) urlh = urllib2.urlopen(UPDATE_URL)
newcontent = urlh.read() newcontent = urlh.read()
vmatch = re.search("__version__ = '([^']+)'", newcontent)
if vmatch is not None and vmatch.group(1) == __version__:
downloader.to_screen(u'youtube-dl is up-to-date (' + __version__ + ')')
return
finally:
urlh.close() urlh.close()
except (IOError, OSError), err: except (IOError, OSError), err:
sys.exit('ERROR: unable to download latest version') sys.exit('ERROR: unable to download latest version')
try:
outf = open(filename, 'wb')
try: try:
outf.write(newcontent) outf = open(filename, 'wb')
finally: try:
outf.close() outf.write(newcontent)
except (IOError, OSError), err: finally:
sys.exit('ERROR: unable to overwrite current version') outf.close()
except (IOError, OSError), err:
sys.exit('ERROR: unable to overwrite current version')
downloader.to_screen(u'Updated youtube-dl. Restart youtube-dl to use the new version.') downloader.to_screen(u'Updated youtube-dl. Restart youtube-dl to use the new version.')