Skip to content

Commit 6e5afab

Browse files
committed
refactor(util): Unify VersionExt, VersionReqExt
For myself, I find the trait-as-a-constructor approach of `VersionReqExt::exact` awkward and find merging it into `VersionExt` as `VersionExt::to_exact_req` is a bit cleaner. For example, this would make it easier to integrate with `PartialVersion` if we want.
1 parent d899b51 commit 6e5afab

File tree

3 files changed

+11
-15
lines changed

3 files changed

+11
-15
lines changed

src/bin/cargo/commands/install.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use cargo::core::{GitReference, SourceId, Workspace};
77
use cargo::ops;
88
use cargo::util::IntoUrl;
99
use cargo::util::ToSemver;
10-
use cargo::util::VersionReqExt;
10+
use cargo::util::VersionExt;
1111
use cargo::CargoResult;
1212
use itertools::Itertools;
1313
use semver::VersionReq;
@@ -265,7 +265,7 @@ fn parse_semver_flag(v: &str) -> CargoResult<VersionReq> {
265265
}
266266
} else {
267267
match v.to_semver() {
268-
Ok(v) => Ok(VersionReq::exact(&v)),
268+
Ok(v) => Ok(v.to_exact_req()),
269269
Err(e) => {
270270
let mut msg = e.to_string();
271271

src/cargo/util/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ pub use self::progress::{Progress, ProgressStyle};
2222
pub use self::queue::Queue;
2323
pub use self::restricted_names::validate_package_name;
2424
pub use self::rustc::Rustc;
25-
pub use self::semver_ext::{OptVersionReq, PartialVersion, RustVersion, VersionExt, VersionReqExt};
25+
pub use self::semver_ext::{OptVersionReq, PartialVersion, RustVersion, VersionExt};
2626
pub use self::to_semver::ToSemver;
2727
pub use self::vcs::{existing_vcs_repo, FossilRepo, GitRepo, HgRepo, PijulRepo};
2828
pub use self::workspace::{

src/cargo/util/semver_ext.rs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,42 +14,38 @@ pub enum OptVersionReq {
1414

1515
pub trait VersionExt {
1616
fn is_prerelease(&self) -> bool;
17-
}
1817

19-
pub trait VersionReqExt {
20-
fn exact(version: &Version) -> Self;
18+
fn to_exact_req(&self) -> VersionReq;
2119
}
2220

2321
impl VersionExt for Version {
2422
fn is_prerelease(&self) -> bool {
2523
!self.pre.is_empty()
2624
}
27-
}
2825

29-
impl VersionReqExt for VersionReq {
30-
fn exact(version: &Version) -> Self {
26+
fn to_exact_req(&self) -> VersionReq {
3127
VersionReq {
3228
comparators: vec![Comparator {
3329
op: Op::Exact,
34-
major: version.major,
35-
minor: Some(version.minor),
36-
patch: Some(version.patch),
37-
pre: version.pre.clone(),
30+
major: self.major,
31+
minor: Some(self.minor),
32+
patch: Some(self.patch),
33+
pre: self.pre.clone(),
3834
}],
3935
}
4036
}
4137
}
4238

4339
impl OptVersionReq {
4440
pub fn exact(version: &Version) -> Self {
45-
OptVersionReq::Req(VersionReq::exact(version))
41+
OptVersionReq::Req(version.to_exact_req())
4642
}
4743

4844
// Since some registries have allowed crate versions to differ only by build metadata,
4945
// A query using OptVersionReq::exact return nondeterministic results.
5046
// So we `lock_to` the exact version were interested in.
5147
pub fn lock_to_exact(version: &Version) -> Self {
52-
OptVersionReq::Locked(version.clone(), VersionReq::exact(version))
48+
OptVersionReq::Locked(version.clone(), version.to_exact_req())
5349
}
5450

5551
pub fn is_exact(&self) -> bool {

0 commit comments

Comments
 (0)