@@ -68,21 +68,15 @@ pub fn is_conda_environment(any_path: &Path) -> bool {
6868/// Get the version of a package in a conda environment. This will find the version
6969/// from the 'conda-meta' directory in a platform agnostic way.
7070fn get_version_from_meta_json ( json_file : & Path ) -> Option < String > {
71- match Regex :: new ( r"(?m)([\d\w\-]*)-([\d\.]*)-.*\.json" ) {
72- Ok ( re) => match json_file. file_name ( ) {
73- Some ( file_name) => {
74- let file_name = file_name. to_string_lossy ( ) ;
75- match re. captures ( & file_name) {
76- Some ( captures) => match captures. get ( 2 ) {
77- Some ( version) => Some ( version. as_str ( ) . to_string ( ) ) ,
78- None => None ,
79- } ,
80- None => None ,
81- }
82- }
83- None => None ,
84- } ,
85- Err ( _) => None ,
71+ let file_name = json_file. file_name ( ) ?. to_string_lossy ( ) ;
72+
73+ match Regex :: new ( r"(?m)([\d\w\-]*)-([\d\.]*)-.*\.json" )
74+ . ok ( ) ?
75+ . captures ( & file_name) ?
76+ . get ( 2 )
77+ {
78+ Some ( version) => Some ( version. as_str ( ) . to_string ( ) ) ,
79+ None => None ,
8680 }
8781}
8882
@@ -134,29 +128,23 @@ fn get_conda_bin_names() -> Vec<&'static str> {
134128
135129/// Find the conda binary on the PATH environment variable
136130fn find_conda_binary_on_path ( ) -> Option < PathBuf > {
137- let paths = env:: var ( "PATH" ) ;
138- match paths {
139- Ok ( paths) => {
140- let paths = env:: split_paths ( & paths) ;
141- for path in paths {
142- let path = Path :: new ( & path) ;
143- for bin in get_conda_bin_names ( ) {
144- let conda_path = path. join ( bin) ;
145- let metadata = std:: fs:: metadata ( & conda_path) ;
146- match metadata {
147- Ok ( metadata) => {
148- if metadata. is_file ( ) || metadata. is_symlink ( ) {
149- return Some ( conda_path) ;
150- }
151- }
152- Err ( _) => ( ) ,
131+ let paths = env:: var ( "PATH" ) . ok ( ) ?;
132+ let paths = env:: split_paths ( & paths) ;
133+ for path in paths {
134+ let path = Path :: new ( & path) ;
135+ for bin in get_conda_bin_names ( ) {
136+ let conda_path = path. join ( bin) ;
137+ match std:: fs:: metadata ( & conda_path) {
138+ Ok ( metadata) => {
139+ if metadata. is_file ( ) || metadata. is_symlink ( ) {
140+ return Some ( conda_path) ;
153141 }
154142 }
143+ Err ( _) => ( ) ,
155144 }
156- None
157145 }
158- Err ( _) => None ,
159146 }
147+ None
160148}
161149
162150fn find_python_binary_path ( env_path : & Path ) -> Option < PathBuf > {
@@ -168,15 +156,8 @@ fn find_python_binary_path(env_path: &Path) -> Option<PathBuf> {
168156 let path_1 = env_path. join ( "bin" ) . join ( python_bin_name) ;
169157 let path_2 = env_path. join ( "Scripts" ) . join ( python_bin_name) ;
170158 let path_3 = env_path. join ( python_bin_name) ;
171- if path_1. exists ( ) {
172- Some ( path_1)
173- } else if path_2. exists ( ) {
174- Some ( path_2)
175- } else if path_3. exists ( ) {
176- Some ( path_3)
177- } else {
178- None
179- }
159+ let paths = vec ! [ path_1, path_2, path_3] ;
160+ paths. into_iter ( ) . find ( |path| path. exists ( ) )
180161}
181162
182163#[ cfg( windows) ]
@@ -232,14 +213,9 @@ fn find_conda_binary_in_known_locations() -> Option<PathBuf> {
232213 for location in known_locations {
233214 for bin in & conda_bin_names {
234215 let conda_path = location. join ( bin) ;
235- let metadata = std:: fs:: metadata ( & conda_path) ;
236- match metadata {
237- Ok ( metadata) => {
238- if metadata. is_file ( ) || metadata. is_symlink ( ) {
239- return Some ( conda_path) ;
240- }
241- }
242- Err ( _) => ( ) ,
216+ let metadata = std:: fs:: metadata ( & conda_path) . ok ( ) ?;
217+ if metadata. is_file ( ) || metadata. is_symlink ( ) {
218+ return Some ( conda_path) ;
243219 }
244220 }
245221 }
@@ -391,7 +367,7 @@ fn get_distinct_conda_envs(conda_bin: PathBuf) -> Vec<CondaEnv> {
391367 conda_envs
392368}
393369
394- pub fn find_and_report_conda_envs ( ) {
370+ pub fn find_and_report ( ) {
395371 let conda_binary = find_conda_binary ( ) ;
396372 match conda_binary {
397373 Some ( conda_binary) => {
0 commit comments