123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import urllib
- import zipfile
- import os
- import ssl
- import httplib
- import socket
- import re
- import cStringIO as StringIO
- from gevent import monkey
- monkey.patch_all()
- 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)
- try:
- open(dest_path, 'wb').write(data)
- except Exception, err:
- print dest_path, err
- print "Done."
- if __name__ == "__main__":
- try:
- update()
- except Exception, err:
- print "Update error: %s" % err
- raw_input("Press enter to exit")
|