mirror of
				https://github.com/wting/autojump
				synced 2025-06-13 12:54:07 +00:00 
			
		
		
		
	try to avoid hammering the filesystem
This significantly improves performance on a loaded machine
This commit is contained in:
		
							parent
							
								
									92b80073fd
								
							
						
					
					
						commit
						c2bd900989
					
				
							
								
								
									
										30
									
								
								autojump
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								autojump
									
									
									
									
									
								
							| @ -180,28 +180,21 @@ def match(path, pattern, ignore_case=False, only_end=False): | |||||||
|         eaten_path = path |         eaten_path = path | ||||||
|     return (does_match, eaten_path) |     return (does_match, eaten_path) | ||||||
| 
 | 
 | ||||||
| def find_matches(dirs, patterns, result_list, ignore_case, max_matches): | def find_matches(dirs, patterns, result_list, ignore_case, max_matches, current_dir): | ||||||
|     """Find max_matches paths that match the pattern,  |     """Find max_matches paths that match the pattern,  | ||||||
|     and add them to the result_list""" |     and add them to the result_list""" | ||||||
|     for path, count in dirs: |     for path, count in dirs: | ||||||
|         # Don't jump to where we alread are |         # Don't jump to where we alread are | ||||||
|         try: |         if current_dir == path : | ||||||
|             if decode(os.path.realpath(os.curdir)) == path : |  | ||||||
|                 continue |  | ||||||
|         #Sometimes the current path doesn't exist anymore. |  | ||||||
|         #In that case, jump if possible. |  | ||||||
|         except OSError: |  | ||||||
|             pass |  | ||||||
|         #If a path doesn't exist, don't jump there |  | ||||||
|         #We still keep it in db in case it's from a removable drive |  | ||||||
|         if not os.path.exists(path): |  | ||||||
|             continue |             continue | ||||||
|         does_match, eaten_path = True, path |         does_match, eaten_path = True, path | ||||||
|         for n,p in enumerate(patterns): |         for n,p in enumerate(patterns): | ||||||
|             #For the last pattern, only match the end of the pattern |             #For the last pattern, only match the end of the pattern | ||||||
|             does_match, eaten_path = match(eaten_path, p, ignore_case, only_end=(n == len(patterns)-1)) |             does_match, eaten_path = match(eaten_path, p, ignore_case, only_end=(n == len(patterns)-1)) | ||||||
|             if not does_match: break |             if not does_match: break | ||||||
|         if does_match: |         #If a path doesn't exist, don't jump there | ||||||
|  |         #We still keep it in db in case it's from a removable drive | ||||||
|  |         if does_match and os.path.exists(path): | ||||||
|             uniqadd(result_list, path) |             uniqadd(result_list, path) | ||||||
|             if len(result_list) >= max_matches : |             if len(result_list) >= max_matches : | ||||||
|                 break |                 break | ||||||
| @ -275,12 +268,21 @@ def shell_utility(): | |||||||
|                 max_matches = 9 |                 max_matches = 9 | ||||||
|             else: |             else: | ||||||
|                 max_matches = 1 |                 max_matches = 1 | ||||||
|             find_matches(dirs, patterns, results, False, max_matches) | 
 | ||||||
|  |             # Don't jump to the current directory | ||||||
|  |             try: | ||||||
|  |                 current_dir = decode(os.path.realpath(os.curdir)) | ||||||
|  |             #Sometimes the current path doesn't exist anymore. | ||||||
|  |             #In that case, jump if possible. | ||||||
|  |             except OSError: | ||||||
|  |                 current_dir = None | ||||||
|  |             find_matches(dirs, patterns, results, False, max_matches, current_dir) | ||||||
|             # If not found, try ignoring case. |             # If not found, try ignoring case. | ||||||
|             # On completion always show all results |             # On completion always show all results | ||||||
|             if completion or not results:  |             if completion or not results:  | ||||||
|                 find_matches(dirs, patterns, results, |                 find_matches(dirs, patterns, results, | ||||||
|                         ignore_case=True, max_matches=max_matches)  |                         ignore_case=True, | ||||||
|  |                         max_matches=max_matches, current_dir=current_dir)  | ||||||
|             # Keep the database to a reasonable size |             # Keep the database to a reasonable size | ||||||
|             if not completion and clean_dict(dirs, path_dict): |             if not completion and clean_dict(dirs, path_dict): | ||||||
|                 save(path_dict, dic_file) |                 save(path_dict, dic_file) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user