corrected -U to support new zipfile and exe (#153) formats
This commit is contained in:
		
							parent
							
								
									303692b5ed
								
							
						
					
					
						commit
						53e893615d
					
				
					 4 changed files with 66 additions and 21 deletions
				
			
		| 
						 | 
				
			
			@ -22,6 +22,8 @@ __license__ = 'Public Domain'
 | 
			
		|||
__version__ = '2012.02.27'
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
| 
						 | 
				
			
			@ -44,33 +46,62 @@ from PostProcessing import *
 | 
			
		|||
def updateSelf(downloader, filename):
 | 
			
		||||
	''' Update the program file with the latest version from the repository '''
 | 
			
		||||
	# Note: downloader only used for options
 | 
			
		||||
	
 | 
			
		||||
	if not os.access(filename, os.W_OK):
 | 
			
		||||
		sys.exit('ERROR: no write permissions on %s' % filename)
 | 
			
		||||
 | 
			
		||||
	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:
 | 
			
		||||
			urlh = urllib2.urlopen(UPDATE_URL)
 | 
			
		||||
			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()
 | 
			
		||||
	except (IOError, OSError), err:
 | 
			
		||||
		sys.exit('ERROR: unable to download latest version')
 | 
			
		||||
		except (IOError, OSError), err:
 | 
			
		||||
			sys.exit('ERROR: unable to download latest version')
 | 
			
		||||
 | 
			
		||||
	try:
 | 
			
		||||
		outf = open(filename, 'wb')
 | 
			
		||||
		try:
 | 
			
		||||
			outf.write(newcontent)
 | 
			
		||||
		finally:
 | 
			
		||||
			outf.close()
 | 
			
		||||
	except (IOError, OSError), err:
 | 
			
		||||
		sys.exit('ERROR: unable to overwrite current version')
 | 
			
		||||
			outf = open(filename, 'wb')
 | 
			
		||||
			try:
 | 
			
		||||
				outf.write(newcontent)
 | 
			
		||||
			finally:
 | 
			
		||||
				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.')
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue