@@ -20,7 +20,8 @@ const EXPAND_ERROR: &str = "Failed to expand ~";
2020const CURR_DIR_ERROR : & str = "Could not get current dir" ;
2121const DIR_ENTRY_LOAD_ERROR : & str = "Failed to load directory entry" ;
2222const DIR_ENTRY_RM_ERROR : & str = "Failed to remove directory entry" ;
23- const DIR_ENTRY_LS_ERROR : & str = "Failed to list prefix directory" ;
23+ const ENTRY_TYPE_ERROR : & str = "Could not determine entry type" ;
24+ const FILE_ENTRY_RM_ERROR : & str = "Failed to remove file entry" ;
2425const PATH_TO_STR_ERROR : & str = "Failed to convert path to string" ;
2526const JAVA_EXEC_ERROR : & str = "Failed to convert Java executable path to string" ;
2627const JAVA_VERSION_ERROR : & str = "Failed to determine Java major version" ;
@@ -49,7 +50,7 @@ pub fn create_path_if_not_exists<P: AsRef<Path>>(path: P) -> zed::Result<()> {
4950 if metadata. is_dir ( ) {
5051 Ok ( ( ) )
5152 } else {
52- Err ( format ! ( "{PATH_IS_NOT_DIR}: {:?}" , path_ref ) )
53+ Err ( format ! ( "{PATH_IS_NOT_DIR}: {path_ref :?}" ) )
5354 }
5455 }
5556 Err ( e) if e. kind ( ) == std:: io:: ErrorKind :: NotFound => {
@@ -280,22 +281,31 @@ pub fn path_to_string<P: AsRef<Path>>(path: P) -> zed::Result<String> {
280281///
281282/// Returns `Ok(())` on success, even if some removals fail (errors are printed to stdout).
282283pub fn remove_all_files_except < P : AsRef < Path > > ( prefix : P , filename : & str ) -> zed:: Result < ( ) > {
283- match fs:: read_dir ( prefix) {
284- Ok ( entries) => {
285- for entry in entries {
286- match entry {
287- Ok ( entry) => {
288- if entry. file_name ( ) . to_str ( ) != Some ( filename)
289- && let Err ( err) = fs:: remove_dir_all ( entry. path ( ) )
290- {
291- println ! ( "{msg}: {err}" , msg = DIR_ENTRY_RM_ERROR , err = err) ;
292- }
284+ let entries: Vec < _ > = match fs:: read_dir ( prefix) {
285+ Ok ( entries) => entries. filter_map ( |e| e. ok ( ) ) . collect ( ) ,
286+ Err ( err) => {
287+ println ! ( "{DIR_ENTRY_LOAD_ERROR}: {err}" ) ;
288+ return Err ( format ! ( "{DIR_ENTRY_LOAD_ERROR}: {err}" ) ) ;
289+ }
290+ } ;
291+
292+ for entry in entries {
293+ if entry. file_name ( ) . to_str ( ) != Some ( filename) {
294+ match entry. file_type ( ) {
295+ Ok ( t) => {
296+ if t. is_dir ( )
297+ && let Err ( err) = fs:: remove_dir_all ( entry. path ( ) )
298+ {
299+ println ! ( "{DIR_ENTRY_RM_ERROR}: {err}" ) ;
300+ } else if t. is_file ( )
301+ && let Err ( err) = fs:: remove_file ( entry. path ( ) )
302+ {
303+ println ! ( "{FILE_ENTRY_RM_ERROR}: {err}" ) ;
293304 }
294- Err ( err) => println ! ( "{msg}: {err}" , msg = DIR_ENTRY_LOAD_ERROR , err = err) ,
295305 }
306+ Err ( type_err) => println ! ( "{ENTRY_TYPE_ERROR}: {type_err}" ) ,
296307 }
297308 }
298- Err ( err) => println ! ( "{msg}: {err}" , msg = DIR_ENTRY_LS_ERROR , err = err) ,
299309 }
300310
301311 Ok ( ( ) )
@@ -328,8 +338,7 @@ pub fn should_use_local_or_download(
328338 CheckUpdates :: Never => match local {
329339 Some ( path) => Ok ( Some ( path) ) ,
330340 None => Err ( format ! (
331- "{} for {}" ,
332- NO_LOCAL_INSTALL_NEVER_ERROR , component_name
341+ "{NO_LOCAL_INSTALL_NEVER_ERROR} for {component_name}"
333342 ) ) ,
334343 } ,
335344 CheckUpdates :: Once => Ok ( local) ,
0 commit comments