@@ -147,7 +147,36 @@ def verify_files(filename, destination, rename_to):
147147 return True
148148
149149
150- def unpack (filename , destination , force_extract ): # noqa: C901
150+ def is_latest_version (destination , dirname , rename_to , cfile , checksum ):
151+ current_version = None
152+ expected_version = None
153+
154+ try :
155+ expected_version = checksum
156+ with open (os .path .join (destination , rename_to , ".package_checksum" ), "r" ) as f :
157+ current_version = f .read ()
158+
159+ if verbose :
160+ print (f"\n Tool: { rename_to } " )
161+ print (f"Current version: { current_version } " )
162+ print (f"Expected version: { expected_version } " )
163+
164+ if current_version and current_version == expected_version :
165+ if verbose :
166+ print ("Latest version already installed. Skipping extraction" )
167+ return True
168+
169+ if verbose :
170+ print ("New version detected" )
171+
172+ except Exception as e :
173+ if verbose :
174+ print (f"Falied to verify version for { rename_to } : { e } " )
175+
176+ return False
177+
178+
179+ def unpack (filename , destination , force_extract , checksum ): # noqa: C901
151180 dirname = ""
152181 cfile = None # Compressed file
153182 file_is_corrupted = False
@@ -196,11 +225,11 @@ def unpack(filename, destination, force_extract): # noqa: C901
196225 rename_to = "esp32-arduino-libs"
197226
198227 if not force_extract :
199- if verify_files ( filename , destination , rename_to ):
200- print ( " Files ok. Skipping Extraction" )
201- return True
202- else :
203- print (" Extracting archive..." )
228+ if is_latest_version ( destination , dirname , rename_to , cfile , checksum ):
229+ if verify_files ( filename , destination , rename_to ):
230+ print ( " Files ok. Skipping Extraction" )
231+ return True
232+ print (" Extracting archive..." )
204233 else :
205234 print (" Forcing extraction" )
206235
@@ -225,6 +254,9 @@ def unpack(filename, destination, force_extract): # noqa: C901
225254 shutil .rmtree (rename_to )
226255 shutil .move (dirname , rename_to )
227256
257+ with open (os .path .join (destination , rename_to , ".package_checksum" ), "w" ) as f :
258+ f .write (checksum )
259+
228260 if verify_files (filename , destination , rename_to ):
229261 print (" Files extracted successfully." )
230262 return True
@@ -324,11 +356,11 @@ def get_tool(tool, force_download, force_extract):
324356 print ("Tool {0} already downloaded" .format (archive_name ))
325357 sys .stdout .flush ()
326358
327- if "esp32-arduino-libs" not in archive_name and sha256sum (local_path ) != checksum :
359+ if sha256sum (local_path ) != checksum :
328360 print ("Checksum mismatch for {0}" .format (archive_name ))
329361 return False
330362
331- return unpack (local_path , "." , force_extract )
363+ return unpack (local_path , "." , force_extract , checksum )
332364
333365
334366def load_tools_list (filename , platform ):
@@ -379,21 +411,17 @@ def identify_platform():
379411if __name__ == "__main__" :
380412 parser = argparse .ArgumentParser (description = "Download and extract tools" )
381413
382- parser .add_argument ("-v" , "--verbose" , type = bool , default = False , required = False , help = "Print verbose output" )
414+ parser .add_argument ("-v" , "--verbose" , action = "store_true" , required = False , help = "Print verbose output" )
383415
384- parser .add_argument (
385- "-d" , "--force_download" , type = bool , default = False , required = False , help = "Force download of tools"
386- )
416+ parser .add_argument ("-d" , "--force_download" , action = "store_true" , required = False , help = "Force download of tools" )
387417
388- parser .add_argument (
389- "-e" , "--force_extract" , type = bool , default = False , required = False , help = "Force extraction of tools"
390- )
418+ parser .add_argument ("-e" , "--force_extract" , action = "store_true" , required = False , help = "Force extraction of tools" )
391419
392420 parser .add_argument (
393- "-f" , "--force_all" , type = bool , default = False , required = False , help = "Force download and extraction of tools"
421+ "-f" , "--force_all" , action = "store_true" , required = False , help = "Force download and extraction of tools"
394422 )
395423
396- parser .add_argument ("-t" , "--test" , type = bool , default = False , required = False , help = argparse .SUPPRESS )
424+ parser .add_argument ("-t" , "--test" , action = "store_true" , required = False , help = argparse .SUPPRESS )
397425
398426 args = parser .parse_args ()
399427
0 commit comments