From 6dfbb39f832a630f49513c67c7fb4ecf1aa49e37 Mon Sep 17 00:00:00 2001 From: Bob Kuhn Date: Sun, 20 May 2018 21:22:04 -0500 Subject: [PATCH] [LPC1768] Add error-handling to upload script, update autobuild.py (#10802) --- .../HAL/HAL_LPC1768/upload_extra_script.py | 44 +++++-- buildroot/share/atom/auto_build.py | 111 +++++++++++------- 2 files changed, 97 insertions(+), 58 deletions(-) diff --git a/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py b/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py index 5831288b7..b3585d621 100644 --- a/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py +++ b/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py @@ -34,6 +34,7 @@ if current_OS == 'Windows': # import os + upload_disk = 'Disk not found' target_file_found = False target_drive_found = False for drive in drives: @@ -66,7 +67,9 @@ if current_OS == 'Windows': env.Replace( UPLOAD_PORT = upload_disk ) - + print 'upload disk: ' , upload_disk + else: + print '\nUnable to find destination disk. File must be copied manually. \n' if current_OS == 'Linux': @@ -76,6 +79,7 @@ if current_OS == 'Linux': # import os + upload_disk = 'Disk not found' target_file_found = False target_drive_found = False medias = os.listdir('/media') # @@ -85,11 +89,15 @@ if current_OS == 'Linux': target_drive_found = True upload_disk = '/media/' + media + '/' + target_drive + '/' for drive in drives: - files = os.listdir('/media/' + media + '/' + drive ) # - if target_filename in files: - if target_file_found == False: - upload_disk = '/media/' + media + '/' + drive + '/' - target_file_found = True + try: + files = os.listdir('/media/' + media + '/' + drive ) + except: + continue + else: + if target_filename in files: + if target_file_found == False: + upload_disk = '/media/' + media + '/' + drive + '/' + target_file_found = True # # set upload_port to drive if found @@ -101,6 +109,9 @@ if current_OS == 'Linux': UPLOAD_FLAGS = "-P$UPLOAD_PORT", UPLOAD_PORT = upload_disk ) + print 'upload disk: ' , upload_disk + else: + print '\nUnable to find destination disk. File must be copied manually. \n' if current_OS == 'Darwin': # MAC @@ -110,19 +121,23 @@ if current_OS == 'Darwin': # MAC # import os + upload_disk = 'Disk not found' drives = os.listdir('/Volumes') # human readable names target_file_found = False target_drive_found = False if target_drive in drives and target_file_found == False: # set upload if not found target file yet target_drive_found = True - upload_disk = '/Volumes/' + drive + '/' + upload_disk = '/Volumes/' + target_drive + '/' for drive in drives: - target_file_found = True - filenames = os.listdir('/Volumes/' + drive + '/') - if target_filename in filenames: - if target_file_found == False: - upload_disk = '/Volumes/' + drive + '/' - target_file_found = True + try: + filenames = os.listdir('/Volumes/' + drive + '/') # will get an error if the drive is protected + except: + continue + else: + if target_filename in filenames: + if target_file_found == False: + upload_disk = '/Volumes/' + drive + '/' + target_file_found = True # # set upload_port to drive if found # @@ -132,3 +147,6 @@ if current_OS == 'Darwin': # MAC env.Replace( UPLOAD_PORT = upload_disk ) + print '\nupload disk: ' , upload_disk, '\n' + else: + print '\nUnable to find destination disk. File must be copied manually. \n' diff --git a/buildroot/share/atom/auto_build.py b/buildroot/share/atom/auto_build.py index 59ef3512b..498140b47 100644 --- a/buildroot/share/atom/auto_build.py +++ b/buildroot/share/atom/auto_build.py @@ -204,7 +204,7 @@ def resolve_path(path): #get line and column numbers line_num = 1 column_num = 1 - line_start = path.find(':') + line_start = path.find(':', 2) # use 2 here so don't eat Windows full path column_start = path.find(':', line_start + 1) if column_start == -1: column_start = len(path) @@ -218,57 +218,69 @@ def resolve_path(path): if not(column_start == column_end): column_num = path[ column_start + 1 : column_end] if column_num == '': - column_num = 1 + column_num = 0 + index_end = path.find(',') + if 0 <= index_end: + path = path[ : index_end] # delete comma and anything after + index_end = path.find(':', 2) + if 0 <= index_end: + path = path[ : path.find(':', 2)] # delete the line number and anything after - path = path[ : path.find(':')] # delete the line number and anything after path = path.replace('\\','/') - # resolve as many '../' as we can - while 0 <= path.find('../'): - end = path.find('../') - 1 - start = path.find('/') - while 0 <= path.find('/',start) and end > path.find('/',start): - start = path.find('/',start) + 1 - path = path[0:start] + path[end + 4: ] + if 1 == path.find(':') and current_OS == 'Windows': + return path, line_num, column_num # found a full path - no need for further processing + elif 0 == path.find('/') and (current_OS == 'Linux' or current_OS == 'Darwin'): + return path, line_num, column_num # found a full path - no need for further processing - # this is an alternative to the above - it just deletes the '../' section - # start_temp = path.find('../') - # while 0 <= path.find('../',start_temp): - # start = path.find('../',start_temp) - # start_temp = start + 1 - # if 0 <= start: - # path = path[start + 2 : ] - - - start = path.find('/') - if not(0 == start): # make sure path starts with '/' - while 0 == path.find(' '): # eat any spaces at the beginning - path = path[ 1 : ] - path = '/' + path - - if current_OS == 'Windows': - search_path = path.replace('/', '\\') # os.walk uses '\' in Windows else: - search_path = path - start_path = os.path.abspath('') + # resolve as many '../' as we can + while 0 <= path.find('../'): + end = path.find('../') - 1 + start = path.find('/') + while 0 <= path.find('/',start) and end > path.find('/',start): + start = path.find('/',start) + 1 + path = path[0:start] + path[end + 4: ] - # search project directory for the selection - found = False - full_path = '' - for root, directories, filenames in os.walk(start_path): - for filename in filenames: - if 0 <= root.find('.git'): # don't bother looking in this directory - break - full_path = os.path.join(root,filename) - if 0 <= full_path.find(search_path): - found = True - break - if found: - break + # this is an alternative to the above - it just deletes the '../' section + # start_temp = path.find('../') + # while 0 <= path.find('../',start_temp): + # start = path.find('../',start_temp) + # start_temp = start + 1 + # if 0 <= start: + # path = path[start + 2 : ] - return full_path, line_num, column_num + + start = path.find('/') + if not(0 == start): # make sure path starts with '/' + while 0 == path.find(' '): # eat any spaces at the beginning + path = path[ 1 : ] + path = '/' + path + + if current_OS == 'Windows': + search_path = path.replace('/', '\\') # os.walk uses '\' in Windows + else: + search_path = path + + start_path = os.path.abspath('') + + # search project directory for the selection + found = False + full_path = '' + for root, directories, filenames in os.walk(start_path): + for filename in filenames: + if 0 <= root.find('.git'): # don't bother looking in this directory + break + full_path = os.path.join(root,filename) + if 0 <= full_path.find(search_path): + found = True + break + if found: + break + + return full_path, line_num, column_num # end - resolve_path @@ -324,6 +336,9 @@ def open_file(path): elif current_OS == 'Linux': command = file_path + ':' + str(line_num) + ':' + str(column_num) + index_end = command.find(',') + if 0 <= index_end: + command = command[ : index_end] # sometimes a comma magically appears, don't want it running_apps = subprocess.Popen('ps ax -o cmd', stdout=subprocess.PIPE, shell=True) (output, err) = running_apps.communicate() temp = output.split('\n') @@ -336,7 +351,7 @@ def open_file(path): return False , '' (success_sublime, editor_path_sublime) = find_editor_linux('sublime_text',temp) - (success_atom, editor_path_atom) = find_editor+linux('atom',temp) + (success_atom, editor_path_atom) = find_editor_linux('atom',temp) if success_sublime: subprocess.Popen([editor_path_sublime, command]) @@ -350,6 +365,9 @@ def open_file(path): elif current_OS == 'Darwin': # MAC command = file_path + ':' + str(line_num) + ':' + str(column_num) + index_end = command.find(',') + if 0 <= index_end: + command = command[ : index_end] # sometimes a comma magically appears, don't want it running_apps = subprocess.Popen('ps axwww -o command', stdout=subprocess.PIPE, shell=True) (output, err) = running_apps.communicate() temp = output.split('\n') @@ -424,8 +442,11 @@ def get_build_last(): date_last = 0.0 DIR__pioenvs = os.listdir('.pioenvs') for name in DIR__pioenvs: + if 0 <= name.find('.') or 0 <= name.find('-'): # skip files in listing + continue DIR_temp = os.listdir('.pioenvs/' + name) for names_temp in DIR_temp: + if 0 == names_temp.find('firmware.'): date_temp = os.path.getmtime('.pioenvs/' + name + '/' + names_temp) if date_temp > date_last: @@ -941,7 +962,7 @@ class output_window(Text): Text.__init__(self, self.frame, borderwidth=3, relief="sunken") self.config(tabs=(400,)) # configure Text widget tab stops self.config(background = 'black', foreground = 'white', font= ("consolas", 12), wrap = 'word', undo = 'True') - self.config(height = 24, width = 120) + self.config(height = 24, width = 100) self.config(insertbackground = 'pale green') # keyboard insertion point self.pack(side='left', fill='both', expand=True)