Skip to content

Instantly share code, notes, and snippets.

@opabravo
Last active September 9, 2022 12:38
Show Gist options
  • Save opabravo/4bf0eedede01ba470c2eb1b9897a369d to your computer and use it in GitHub Desktop.
Save opabravo/4bf0eedede01ba470c2eb1b9897a369d to your computer and use it in GitHub Desktop.
Auto update vscode for portable version
import sys
import os
import shutil
import zipfile
import requests
URL = "https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-archive"
ZIP_FILE_NAME = "vscode.zip"
def download_vscode(file_name: str) -> None:
print(f"Downloading \"{file_name}\"")
with open(file_name, "wb") as f:
response = requests.get(URL, stream=True)
if total_length := response.headers.get('content-length'):
total_length = int(total_length)
dl = 0
for data in response.iter_content(chunk_size=4096):
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
print(f"[{'=' * done}{' ' * (50-done)}]", end="\r", flush=True)
else:
f.write(response.content)
def remove_old_files():
"""Remove old files except data folder"""
fp = '.'
white_list = ('data', os.path.basename(__file__))
for file in os.listdir(fp):
if file.lower() in white_list:
continue
path = os.path.join(fp, file)
try:
shutil.rmtree(path)
except OSError:
os.remove(path)
def extract_vscode_zip(fn: str):
with zipfile.ZipFile(fn, 'r') as data:
data.extractall('')
if __name__ == '__main__':
print("Terminating Vscode Proccess....")
os.system('taskkill /im code.exe /f')
print('Removing old files except user Data....')
while 1:
try:
remove_old_files()
break
except PermissionError:
sys.stdout.write("\rMake sure to close VSCode processes...")
sys.stdout.flush()
download_vscode(ZIP_FILE_NAME)
print(f"\nDone downloading \"{ZIP_FILE_NAME}\"")
print(f"Extracting \"{ZIP_FILE_NAME}\"...")
extract_vscode_zip(ZIP_FILE_NAME)
os.remove(f'./{ZIP_FILE_NAME}')
input('\n---\nDone!')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment