122 lines
		
	
	
	
		
			2.6 KiB
			
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
	
		
			2.6 KiB
			
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python
 | 
						|
 | 
						|
import atexit
 | 
						|
import contextlib
 | 
						|
import errno
 | 
						|
import shutil
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
import tarfile
 | 
						|
import tempfile
 | 
						|
import urllib2
 | 
						|
import os
 | 
						|
import zipfile
 | 
						|
 | 
						|
 | 
						|
def tempdir(prefix=''):
 | 
						|
  directory = tempfile.mkdtemp(prefix=prefix)
 | 
						|
  atexit.register(shutil.rmtree, directory)
 | 
						|
  return directory
 | 
						|
 | 
						|
 | 
						|
@contextlib.contextmanager
 | 
						|
def scoped_cwd(path):
 | 
						|
  cwd = os.getcwd()
 | 
						|
  os.chdir(path)
 | 
						|
  try:
 | 
						|
    yield
 | 
						|
  finally:
 | 
						|
    os.chdir(cwd)
 | 
						|
 | 
						|
 | 
						|
def download(text, url, path):
 | 
						|
  with open(path, 'w') as local_file:
 | 
						|
    web_file = urllib2.urlopen(url)
 | 
						|
    file_size = int(web_file.info().getheaders("Content-Length")[0])
 | 
						|
    downloaded_size = 0
 | 
						|
    block_size = 128
 | 
						|
 | 
						|
    ci = os.environ.get('CI') == '1'
 | 
						|
 | 
						|
    while True:
 | 
						|
      buf = web_file.read(block_size)
 | 
						|
      if not buf:
 | 
						|
        break
 | 
						|
 | 
						|
      downloaded_size += len(buf)
 | 
						|
      local_file.write(buf)
 | 
						|
 | 
						|
      if not ci:
 | 
						|
        percent = downloaded_size * 100. / file_size
 | 
						|
        status = "\r%s  %10d  [%3.1f%%]" % (text, downloaded_size, percent)
 | 
						|
        print status,
 | 
						|
 | 
						|
    if ci:
 | 
						|
      print "%s done." % (text)
 | 
						|
    else:
 | 
						|
      print
 | 
						|
 | 
						|
 | 
						|
def extract_tarball(tarball_path, member, destination):
 | 
						|
  with tarfile.open(tarball_path) as tarball:
 | 
						|
    tarball.extract(member, destination)
 | 
						|
 | 
						|
 | 
						|
def extract_zip(zip_path, destination):
 | 
						|
  if sys.platform == 'darwin':
 | 
						|
    # Use unzip command on Mac to keep symbol links in zip file work.
 | 
						|
    execute(['unzip', zip_path, '-d', destination])
 | 
						|
  else:
 | 
						|
    with zipfile.ZipFile(zip_path) as z:
 | 
						|
      z.extractall(destination)
 | 
						|
 | 
						|
def make_zip(zip_file_path, files, dirs):
 | 
						|
  safe_unlink(zip_file_path)
 | 
						|
  if sys.platform == 'darwin':
 | 
						|
    files += dirs
 | 
						|
    execute(['zip', '-r', '-y', zip_file_path] + files)
 | 
						|
  else:
 | 
						|
    zip_file = zipfile.ZipFile(zip_file_path, "w", zipfile.ZIP_DEFLATED)
 | 
						|
    for filename in files:
 | 
						|
      zip_file.write(filename, filename)
 | 
						|
    for dirname in dirs:
 | 
						|
      for root, _, filenames in os.walk(dirname):
 | 
						|
        for f in filenames:
 | 
						|
          zip_file.write(os.path.join(root, f))
 | 
						|
    zip_file.close()
 | 
						|
 | 
						|
 | 
						|
def rm_rf(path):
 | 
						|
  try:
 | 
						|
    shutil.rmtree(path)
 | 
						|
  except OSError as e:
 | 
						|
    if e.errno != errno.ENOENT:
 | 
						|
      raise
 | 
						|
 | 
						|
 | 
						|
def safe_unlink(path):
 | 
						|
  try:
 | 
						|
    os.unlink(path)
 | 
						|
  except OSError as e:
 | 
						|
    if e.errno != errno.ENOENT:
 | 
						|
      raise
 | 
						|
 | 
						|
 | 
						|
def safe_mkdir(path):
 | 
						|
  try:
 | 
						|
    os.makedirs(path)
 | 
						|
  except OSError as e:
 | 
						|
    if e.errno != errno.EEXIST:
 | 
						|
      raise
 | 
						|
 | 
						|
 | 
						|
def execute(argv):
 | 
						|
  try:
 | 
						|
    return subprocess.check_output(argv, stderr=subprocess.STDOUT)
 | 
						|
  except subprocess.CalledProcessError as e:
 | 
						|
    print e.output
 | 
						|
    raise e
 | 
						|
 | 
						|
 | 
						|
def get_atom_shell_version():
 | 
						|
  return subprocess.check_output(['git', 'describe', '--tags']).strip()
 |