Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7015c02

Browse filesBrowse files
committed
refactor: remove use of walkdir crate and address clippy lints
1 parent 3c4bff0 commit 7015c02
Copy full SHA for 7015c02

File tree

Expand file treeCollapse file tree

3 files changed

+34
-43
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+34
-43
lines changed

‎Cargo.lock

Copy file name to clipboardExpand all lines: Cargo.lock
+4-5Lines changed: 4 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎postgresql_embedded/Cargo.toml

Copy file name to clipboardExpand all lines: postgresql_embedded/Cargo.toml
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ thiserror = { workspace = true }
3030
tokio = { workspace = true, features = ["full"], optional = true }
3131
tracing = { workspace = true, features = ["log"] }
3232
url = { workspace = true }
33-
walkdir = "2.5.0"
3433

3534
[dev-dependencies]
3635
anyhow = { workspace = true }

‎postgresql_embedded/src/postgresql.rs

Copy file name to clipboardExpand all lines: postgresql_embedded/src/postgresql.rs
+30-37Lines changed: 30 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,11 @@ use postgresql_commands::CommandBuilder;
1515
use postgresql_commands::CommandExecutor;
1616
use semver::Version;
1717
use sqlx::{PgPool, Row};
18-
use std::ffi::OsStr;
19-
use std::fs::{remove_dir_all, remove_file};
18+
use std::fs::{read_dir, remove_dir_all, remove_file};
2019
use std::io::prelude::*;
2120
use std::net::TcpListener;
2221
use std::path::PathBuf;
2322
use tracing::{debug, instrument};
24-
use walkdir::WalkDir;
2523

2624
use crate::Error::{CreateDatabaseError, DatabaseExistsError, DropDatabaseError};
2725

@@ -95,48 +93,43 @@ impl PostgreSQL {
9593
/// If it doesn't, it will search all the child directories for the latest version that matches the requirement.
9694
/// If it returns None, we couldn't find a matching installation.
9795
fn installed_dir(&self) -> Option<PathBuf> {
98-
fn file_name_to_version(name: &OsStr) -> Option<Version> {
99-
Version::parse(name.to_string_lossy().as_ref()).ok()
100-
}
10196
let path = &self.settings.installation_dir;
10297
let maybe_path_version = path
10398
.file_name()
104-
.map(|name| file_name_to_version(name))
105-
.flatten();
99+
.and_then(|file_name| Version::parse(&file_name.to_string_lossy()).ok());
106100
// If this directory matches the version requirement, we're done.
107101
if let Some(path_version) = maybe_path_version {
108102
if self.settings.version.matches(&path_version) && path.exists() {
109-
return Some(path.to_path_buf());
110-
}
111-
}
112-
// Otherwise we check the child directories.
113-
let mut max_version: Option<Version> = None;
114-
let mut max_path: Option<PathBuf> = None;
115-
for entry in WalkDir::new(path).min_depth(1).max_depth(1) {
116-
let Some(entry) = entry.ok() else {
117-
// We ignore filesystem errors.
118-
continue;
119-
};
120-
// Skip non-directories
121-
if !entry.file_type().is_dir() {
122-
continue;
103+
return Some(path.clone());
123104
}
124-
// If it doesn't look like a version, we ignore it.
125-
let Some(version) = file_name_to_version(entry.file_name()) else {
126-
continue;
127-
};
128-
// If it doesn't match the version requirement, we ignore it.
129-
if !self.settings.version.matches(&version) {
130-
continue;
131-
}
132-
// If we already found a version that's greater or equal, we ignore it.
133-
if max_version.iter().any(|prev_max| *prev_max >= version) {
134-
continue;
135-
}
136-
max_version = Some(version.clone());
137-
max_path = Some(entry.path().to_path_buf());
138105
}
139-
max_path
106+
107+
// Get all directories in the path as versions.
108+
let mut versions = read_dir(path)
109+
.ok()?
110+
.filter_map(|entry| {
111+
let Some(entry) = entry.ok() else {
112+
// We ignore filesystem errors.
113+
return None;
114+
};
115+
// Skip non-directories
116+
if !entry.file_type().ok()?.is_dir() {
117+
return None;
118+
}
119+
let file_name = entry.file_name();
120+
let version = Version::parse(&file_name.to_string_lossy()).ok()?;
121+
if self.settings.version.matches(&version) {
122+
Some((version, entry.path()))
123+
} else {
124+
None
125+
}
126+
})
127+
.collect::<Vec<_>>();
128+
// Sort the versions in descending order i.e. latest version first
129+
versions.sort_by(|(a, _), (b, _)| b.cmp(a));
130+
// Get the first matching version as the best match
131+
let version_path = versions.first().map(|(_, path)| path.clone());
132+
version_path
140133
}
141134

142135
/// Check if the `PostgreSQL` server is initialized

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.