Skip to content

Commit 3771289

Browse files
committed
feat: update command
1 parent 44c772f commit 3771289

1 file changed

Lines changed: 16 additions & 35 deletions

File tree

src/commands/update.py

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import os
2+
import sys
23
import urllib.request
34
import json
45
import logging
6+
import subprocess
57
from argparse import _SubParsersAction, ArgumentParser
68

79
from src.utils.version import get_pvm_version
810

911
logger = logging.getLogger("pvm.update")
1012

11-
def get_latest_release_url(repo_owner, repo_name, asset_name):
13+
def get_latest_release(repo_owner, repo_name, asset_name):
1214
"""Fetch the latest release download URL from GitHub API."""
1315
api_url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/releases/latest"
1416

@@ -28,47 +30,26 @@ def get_latest_release_url(repo_owner, repo_name, asset_name):
2830
raise
2931

3032
def handle_update(args):
31-
32-
if not os.getenv('LOCALAPPDATA'):
33-
logger.error("LOCALAPPDATA environment variable not set. Cannot proceed with update.")
33+
34+
if get_pvm_version() == get_latest_release("itsAnanth", "pvm", "pvm.exe")[1]:
35+
print("pvm is already up to date.")
3436
return
3537

36-
install_dir = os.path.join(os.getenv('LOCALAPPDATA'), '.pvm')
37-
exe_path = os.path.join(install_dir, 'pvm.exe')
38+
# Run the install script in a new PowerShell window
39+
ps_command = 'irm https://raw.githubusercontent.com/itsAnanth/pvm/refs/heads/main/powershell/install.ps1 | iex'
3840

3941
try:
40-
# Get latest release URL from GitHub API
41-
logger.info("Fetching latest release information...")
42-
url, version = get_latest_release_url('itsAnanth', 'pvm', 'pvm.exe')
43-
44-
if version == get_pvm_version():
45-
print(f"You are already using the latest version of PVM. {version}")
46-
return
47-
48-
logger.info(f"Latest version: {version}")
49-
logger.info(f"Download URL: {url}")
50-
42+
subprocess.Popen(
43+
['powershell', '-NoExit', '-ExecutionPolicy', 'ByPass', '-Command', ps_command],
44+
creationflags=subprocess.CREATE_NEW_CONSOLE if sys.platform == 'win32' else 0
45+
)
5146

52-
# Create directory if it doesn't exist
53-
os.makedirs(install_dir, exist_ok=True)
54-
logger.info(f"pvm directory: {install_dir}")
47+
logger.info("Update process started in a new terminal window.")
48+
logger.info("Please check the terminal window for update progress.")
5549

56-
# Check if file exists for update
57-
logger.info("Updating existing PVM installation..." if os.path.exists(exe_path) else "No existing installation found, downloading fresh copy...")
58-
59-
# Download the file
60-
logger.info(f"Downloading pvm.exe from {url}...")
61-
urllib.request.urlretrieve(url, exe_path)
62-
63-
print(f"\nUpdate complete! PVM {version} installed at: {exe_path}")
64-
65-
except urllib.error.URLError as e:
66-
logger.error(f"Failed to download: {e}")
67-
print(f"Update failed")
68-
return
6950
except Exception as e:
70-
logger.error(f"Failed to run update: {e}")
71-
print(f"Update failed")
51+
logger.error(f"Failed to start update: {e}")
52+
logger.error("Update failed")
7253
return
7354

7455
def update_command(sub_parser: _SubParsersAction[ArgumentParser]):

0 commit comments

Comments
 (0)