11import os
2+ import sys
23import urllib .request
34import json
45import logging
6+ import subprocess
57from argparse import _SubParsersAction , ArgumentParser
68
79from src .utils .version import get_pvm_version
810
911logger = 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
3032def 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"\n Update 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
7455def update_command (sub_parser : _SubParsersAction [ArgumentParser ]):
0 commit comments