99from github import Github
1010import wget
1111import subprocess
12- import shutil
12+ from shutil import copyfile
1313
1414
1515class ReleaseManager (MakesmithInitFuncs ):
@@ -24,66 +24,75 @@ def getReleases(self):
2424 tempReleases = []
2525 enableExperimental = self .data .config .getValue ("WebControl Settings" , "experimentalReleases" )
2626 for release in self .releases :
27- if not enableExperimental :
28- if not self .isExperimental (re .sub (r'[v]' , r'' , release .tag_name )):
27+ if self .isExperimental (release ):
28+ if enableExperimental :
29+ # Add experimental releases is setting enabled.
2930 tempReleases .append (release )
3031 else :
32+ # Add stable releases.
3133 tempReleases .append (release )
3234 return tempReleases
3335
34-
3536 def getLatestRelease (self ):
3637 return self .latestRelease
3738
3839 def checkForLatestPyRelease (self ):
39- if True : # self.data.platform=="PYINSTALLER":
40- print ("Checking latest pyrelease." )
41- try :
42- enableExperimental = self .data .config .getValue ("WebControl Settings" , "experimentalReleases" )
43- g = Github ()
44- repo = g .get_repo ("WebControlCNC/WebControl" )
45- self .releases = repo .get_releases ()
46- latestVersionGithub = 0
47- self .latestRelease = None
48- for release in self .releases :
40+ print ("Checking latest pyrelease." )
41+ try :
42+ enableExperimental = self .data .config .getValue ("WebControl Settings" , "experimentalReleases" )
43+ g = Github ()
44+ repo = g .get_repo ("WebControlCNC/WebControl" )
45+ self .releases = repo .get_releases ()
46+ latestVersionGithub = 0
47+ self .latestRelease = None
48+ for release in self .releases :
49+ isExperimental = self .isExperimental (release )
50+ eligible = False
51+ if isExperimental :
52+ if enableExperimental :
53+ # Add experimental releases is setting enabled.
54+ eligible = True
55+ tag_name = release .tag_name
56+ tag_float = float (re .sub ("-" , "" , tag_name ))
57+ else :
58+ # Add stable releases.
4959 tag_name = re .sub (r'[v]' , r'' , release .tag_name )
5060 tag_float = float (tag_name )
51- eligible = False
52- if not enableExperimental :
53- if not self .isExperimental (release ):
54- eligible = True
55- else :
56- eligible = True
57- #print("tag:"+tag_name+", eligible:"+str(eligible))
58- if eligible and tag_float > latestVersionGithub :
59- latestVersionGithub = tag_float
60- self .latestRelease = release
61-
62- print ("Latest pyrelease: " + str (latestVersionGithub ))
63- if self .latestRelease is not None and latestVersionGithub > self .data .pyInstallCurrentVersion :
64- print ("Latest release tag: " + self .latestRelease .tag_name )
65- assets = self .latestRelease .get_assets ()
66- for asset in assets :
67- if asset .name .find (self .data .pyInstallType ) != - 1 and asset .name .find (self .data .pyInstallPlatform ) != - 1 :
68- print (asset .name )
69- print (asset .url )
70- self .data .ui_queue1 .put ("Action" , "pyinstallUpdate" , "on" )
71- self .data .pyInstallUpdateAvailable = True
72- self .data .pyInstallUpdateBrowserUrl = asset .browser_download_url
73- self .data .pyInstallUpdateVersion = self .latestRelease
74- except Exception as e :
75- print ("Error checking pyrelease: " + str (e ))
76-
77- def isExperimental (self , release ):
61+ eligible = True
62+
63+ #print("tag:"+tag_name+", eligible:"+str(eligible))
64+ if eligible and tag_float > latestVersionGithub :
65+ latestVersionGithub = tag_float
66+ self .latestRelease = release
67+
68+ print ("Latest pyrelease: " + str (latestVersionGithub ))
69+ if self .latestRelease is not None and latestVersionGithub > self .data .pyInstallCurrentVersion :
70+ print ("Latest release tag: " + self .latestRelease .tag_name )
71+ assets = self .latestRelease .get_assets ()
72+ for asset in assets :
73+ if asset .name .find (self .data .pyInstallType ) != - 1 and asset .name .find (self .data .pyInstallPlatform ) != - 1 :
74+ print (asset .name )
75+ print (asset .url )
76+ self .data .ui_queue1 .put ("Action" , "pyinstallUpdate" , "on" )
77+ self .data .pyInstallUpdateAvailable = True
78+ self .data .pyInstallUpdateBrowserUrl = asset .browser_download_url
79+ self .data .pyInstallUpdateVersion = self .latestRelease
80+ except Exception as e :
81+ print ("Error checking pyrelease: " + str (e ))
82+
83+ def isExperimental (self , tag ):
7884 '''
79- Deternmines if release is experimental. Pre-Releases are experimental.
85+ Deternmines if release is experimental. All even releases are stable, odd releases are experimental
8086 :param tag:
8187 :return:
8288 '''
83- if release .prerelease :
84- return True
85- else :
89+ if float (tag ) <= 0.931 : # all releases before now are 'stable'
90+ return False
91+ lastDigit = tag [- 1 ]
92+ if (int (lastDigit ) % 2 ) == 0 : # only even releases are 'stable'
8693 return False
94+ else :
95+ return True
8796
8897 def processAbsolutePath (self , path ):
8998 index = path .find ("main.py" )
@@ -103,78 +112,36 @@ def updatePyInstaller(self, bypassCheck = False):
103112 except :
104113 print ("error cleaning download directory: " , filePath )
105114 print ("---" )
106- print ("Downloading new WebControl release..." )
107115 if self .data .pyInstallPlatform == "win32" or self .data .pyInstallPlatform == "win64" :
108116 filename = wget .download (self .data .pyInstallUpdateBrowserUrl , out = home + "\\ .WebControl\\ downloads" )
109117 else :
110118 filename = wget .download (self .data .pyInstallUpdateBrowserUrl , out = home + "/.WebControl/downloads" )
111- print ("Successfully downloaded new release to:" + filename )
119+ print (filename )
112120
113121 if self .data .platform == "PYINSTALLER" :
114122 lhome = os .path .join (self .data .platformHome )
115123 else :
116124 lhome = "."
117-
118- print ("Creating target version directory..." )
119- target_dir = self .data .pyInstallInstalledPath + '_next'
120- if os .path .exists (target_dir ):
121- print ("New release directory already exists, removing it" )
122- shutil .rmtree (target_dir )
123- os .mkdir (target_dir )
124- print ("Creating target version directory DONE" )
125-
126- print ("Unzipping new release..." )
127- if self .data .pyInstallPlatform == "win32" or self .data .pyInstallPlatform == "win64" :
128- command = [
129- lhome + "/tools/7za.exe" ,
130- "x" ,
131- "-y" ,
132- filename ,
133- "-o" ,
134- target_dir
135- ]
136- print (command )
137- subprocess .run (command )
138- else :
139- command = [
140- "tar" ,
141- "-zxf" ,
142- filename ,
143- "-C" ,
144- target_dir
145- ]
146- print (command )
147- subprocess .run (command )
148- print ("Unzipping new release DONE" )
149-
150- print ("Upgrade script..." )
151- print ("Checking if it needs to be run for platform: " + self .data .pyInstallPlatform )
152125 if self .data .pyInstallPlatform == "win32" or self .data .pyInstallPlatform == "win64" :
153- upgrade_script_path = target_dir + "\\ tools\\ upgrade_" + self . data . pyInstallPlatform + " .bat"
154- else :
155- upgrade_script_path = target_dir + "/tools/upgrade_" + self . data . pyInstallPlatform + ".sh "
156- if os . path . exists ( upgrade_script_path ):
157- print ( "Yes, running it" )
158- self . make_executable ( upgrade_script_path )
159- subprocess . run ([ upgrade_script_path ])
126+ path = lhome + "/ tools/upgrade_webcontrol_win .bat"
127+ copyfile ( path , home + "/.WebControl/downloads/upgrade_webcontrol_win.bat" )
128+ path = lhome + "/tools/7za.exe "
129+ copyfile ( path , home + "/.WebControl/downloads/7za.exe" )
130+ self . data . pyInstallInstalledPath = self . data . pyInstallInstalledPath . replace ( '/' , ' \\ ' )
131+ program_name = home + " \\ .WebControl \\ downloads \\ upgrade_webcontrol_win.bat"
132+
160133 else :
161- print ("No upgrade script needed." )
162- print ("Upgrade script DONE" )
163-
164- print ("Backing up the current install..." )
165- backup_path = self .data .pyInstallInstalledPath + '_old'
166- print ("Backup location: " + backup_path )
167- if os .path .exists (backup_path ):
168- print ("Old backup found, removing it" )
169- shutil .rmtree (backup_path )
170- os .rename (self .data .pyInstallInstalledPath , self .data .pyInstallInstalledPath + '_old' )
171- print ("Backing up the current install DONE" )
172-
173- print ("Moving the target version in place..." )
174- os .rename (target_dir , self .data .pyInstallInstalledPath )
175- print ("Moving the target version in place DONE" )
176-
177- print ("WebControl upgrade complete, shutting down to make way to the target version" )
134+ path = lhome + "/tools/upgrade_webcontrol.sh"
135+ copyfile (path , home + "/.WebControl/downloads/upgrade_webcontrol.sh" )
136+ program_name = home + "/.WebControl/downloads/upgrade_webcontrol.sh"
137+ self .make_executable (home + "/.WebControl/downloads/upgrade_webcontrol.sh" )
138+ tool_path = home + "\\ .WebControl\\ downloads\\ 7za.exe"
139+ arguments = [filename , self .data .pyInstallInstalledPath , tool_path ]
140+ command = [program_name ]
141+ command .extend (arguments )
142+ print ("popening" )
143+ print (command )
144+ subprocess .Popen (command )
178145 return True
179146 return False
180147
@@ -204,7 +171,7 @@ def update(self, version):
204171 self .data .pyInstallUpdateBrowserUrl = asset .browser_download_url
205172 print (self .data .pyInstallUpdateBrowserUrl )
206173 return self .updatePyInstaller (True )
207- print ("Couldn't find a suitable file for the current platform and target version: " + version )
174+ print ("hmmm.. issue" )
208175 return False
209176
210177
0 commit comments