69 lines
No EOL
1.9 KiB
Python
69 lines
No EOL
1.9 KiB
Python
from gevent import monkey; monkey.patch_all()
|
|
import urllib, zipfile, os, ssl, httplib, socket, re
|
|
import cStringIO as StringIO
|
|
|
|
def update():
|
|
# Gevent https bug workaround (https://github.com/gevent/gevent/issues/477)
|
|
reload(socket)
|
|
reload(httplib)
|
|
reload(ssl)
|
|
|
|
print "Downloading.",
|
|
file = urllib.urlopen("https://github.com/HelloZeroNet/ZeroNet/archive/master.zip")
|
|
data = StringIO.StringIO()
|
|
while True:
|
|
buff = file.read(1024*16)
|
|
if not buff: break
|
|
data.write(buff)
|
|
print ".",
|
|
print "Downloaded."
|
|
|
|
# Checking plugins
|
|
plugins_enabled = []
|
|
plugins_disabled = []
|
|
if os.path.isdir("plugins"):
|
|
for dir in os.listdir("plugins"):
|
|
if dir.startswith("disabled-"):
|
|
plugins_disabled.append(dir.replace("disabled-", ""))
|
|
else:
|
|
plugins_enabled.append(dir)
|
|
print "Plugins enabled:", plugins_enabled, "disabled:", plugins_disabled
|
|
|
|
|
|
print "Extracting...",
|
|
zip = zipfile.ZipFile(data)
|
|
for inner_path in zip.namelist():
|
|
inner_path = inner_path.replace("\\", "/") # Make sure we have unix path
|
|
print ".",
|
|
dest_path = inner_path.replace("ZeroNet-master/", "")
|
|
if not dest_path: continue
|
|
|
|
|
|
# Keep plugin disabled/enabled status
|
|
match = re.match("plugins/([^/]+)", dest_path)
|
|
if match:
|
|
plugin_name = match.group(1).replace("disabled-","")
|
|
if plugin_name in plugins_enabled: # Plugin was enabled
|
|
dest_path = dest_path.replace("plugins/disabled-"+plugin_name, "plugins/"+plugin_name)
|
|
elif plugin_name in plugins_disabled: # Plugin was disabled
|
|
dest_path = dest_path.replace("plugins/"+plugin_name, "plugins/disabled-"+plugin_name)
|
|
print "P",
|
|
|
|
dest_dir = os.path.dirname(dest_path)
|
|
|
|
if dest_dir and not os.path.isdir(dest_dir):
|
|
os.makedirs(dest_dir)
|
|
|
|
if dest_dir != dest_path.strip("/"):
|
|
data = zip.read(inner_path)
|
|
open(dest_path, 'wb').write(data)
|
|
|
|
print "Done."
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
update()
|
|
except Exception, err:
|
|
print "Update error: %s" % err
|
|
raw_input("Press enter to exit") |