From 61c95b750f7a68ef5d01954b3c1a8527a62387cf Mon Sep 17 00:00:00 2001 From: Yehuda Katz + Carl Lerche Date: Tue, 10 Jun 2014 16:58:42 -0700 Subject: [PATCH] Rename NameVer -> PackageId --- src/cargo/core/manifest.rs | 18 ++++++--- src/cargo/core/mod.rs | 10 ++--- src/cargo/core/namever.rs | 48 ---------------------- src/cargo/core/package.rs | 22 +++++------ src/cargo/core/package_id.rs | 70 +++++++++++++++++++++++++++++++++ src/cargo/core/resolver.rs | 18 ++++----- src/cargo/core/source.rs | 10 ++--- src/cargo/core/summary.rs | 18 ++++----- src/cargo/sources/git/source.rs | 8 ++-- src/cargo/sources/path.rs | 8 ++-- src/cargo/util/toml.rs | 2 +- 11 files changed, 131 insertions(+), 101 deletions(-) delete mode 100644 src/cargo/core/namever.rs create mode 100644 src/cargo/core/package_id.rs diff --git a/src/cargo/core/manifest.rs b/src/cargo/core/manifest.rs index 31e7b701d..37882559a 100644 --- a/src/cargo/core/manifest.rs +++ b/src/cargo/core/manifest.rs @@ -1,10 +1,11 @@ use std::fmt; use std::fmt::{Show,Formatter}; +use semver; use semver::Version; use serialize::{Encoder,Decoder,Encodable}; use core::{ Dependency, - NameVer, + PackageId, Summary }; use core::dependency::SerializedDependency; @@ -101,12 +102,16 @@ impl Manifest { &self.summary } + pub fn get_package_id<'a>(&'a self) -> &'a PackageId { + self.get_summary().get_package_id() + } + pub fn get_name<'a>(&'a self) -> &'a str { - self.get_summary().get_name_ver().get_name() + self.get_package_id().get_name() } pub fn get_version<'a>(&'a self) -> &'a Version { - self.get_summary().get_name_ver().get_version() + self.get_summary().get_package_id().get_version() } pub fn get_authors<'a>(&'a self) -> &'a [String] { @@ -169,6 +174,9 @@ impl Target { } } +/* TODO: + * - Figure out if this is needed and/or if it should be moved somewhere else + */ #[deriving(Decodable,Encodable,PartialEq,Clone,Show)] pub struct Project { pub name: String, @@ -177,8 +185,8 @@ pub struct Project { } impl Project { - pub fn to_name_ver(&self) -> NameVer { - NameVer::new(self.name.as_slice(), self.version.as_slice()) + pub fn to_package_id(&self) -> PackageId { + PackageId::new(self.name.as_slice(), semver::parse(self.version.as_slice()).unwrap()) } } diff --git a/src/cargo/core/mod.rs b/src/cargo/core/mod.rs index 652d66da7..571b729e4 100644 --- a/src/cargo/core/mod.rs +++ b/src/cargo/core/mod.rs @@ -1,7 +1,3 @@ -pub use self::namever::{ - NameVer -}; - pub use self::registry::{ Registry, }; @@ -18,6 +14,10 @@ pub use self::package::{ PackageSet }; +pub use self::package_id::{ + PackageId +}; + pub use self::source::{ Source }; @@ -30,9 +30,9 @@ pub use self::dependency::Dependency; pub use self::version_req::VersionReq; pub mod errors; -pub mod namever; pub mod source; pub mod package; +pub mod package_id; pub mod dependency; pub mod manifest; pub mod resolver; diff --git a/src/cargo/core/namever.rs b/src/cargo/core/namever.rs deleted file mode 100644 index b09475c1c..000000000 --- a/src/cargo/core/namever.rs +++ /dev/null @@ -1,48 +0,0 @@ -use semver; -use std::fmt; -use std::fmt::{Show,Formatter}; -use serialize::{ - Encodable, - Encoder, - Decodable, - Decoder -}; - -#[deriving(Clone,PartialEq,PartialOrd)] -pub struct NameVer { - name: String, - version: semver::Version -} - -impl NameVer { - pub fn new(name: &str, version: &str) -> NameVer { - NameVer { name: name.to_str(), version: semver::parse(version.as_slice()).unwrap() } - } - - pub fn get_name<'a>(&'a self) -> &'a str { - self.name.as_slice() - } - - pub fn get_version<'a>(&'a self) -> &'a semver::Version { - &self.version - } -} - -impl Show for NameVer { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - write!(f, "{} v{}", self.name, self.version) - } -} - -impl> Decodable for NameVer { - fn decode(d: &mut D) -> Result { - let vector: Vec = try!(Decodable::decode(d)); - Ok(NameVer { name: vector.get(0).clone(), version: semver::parse(vector.get(1).as_slice()).unwrap() }) - } -} - -impl> Encodable for NameVer { - fn encode(&self, e: &mut S) -> Result<(), E> { - (vec!(self.name.clone(), self.version.to_str())).encode(e) - } -} diff --git a/src/cargo/core/package.rs b/src/cargo/core/package.rs index 1a54c1e8c..ff83846a7 100644 --- a/src/cargo/core/package.rs +++ b/src/cargo/core/package.rs @@ -4,9 +4,9 @@ use std::fmt::{Show,Formatter}; use std::path::Path; use semver::Version; use core::{ - NameVer, Dependency, Manifest, + PackageId, Registry, Target, Summary @@ -37,11 +37,11 @@ impl> Encodable for Package { fn encode(&self, s: &mut S) -> Result<(), E> { let manifest = self.get_manifest(); let summary = manifest.get_summary(); - let name_ver = summary.get_name_ver(); + let package_id = summary.get_package_id(); SerializedPackage { - name: name_ver.get_name().to_str(), - version: name_ver.get_version().to_str(), + name: package_id.get_name().to_str(), + version: package_id.get_version().to_str(), dependencies: summary.get_dependencies().iter().map(|d| SerializedDependency::from_dependency(d)).collect(), authors: Vec::from_slice(manifest.get_authors()), targets: Vec::from_slice(manifest.get_targets()), @@ -70,12 +70,16 @@ impl Package { self.manifest.get_summary() } + pub fn get_package_id<'a>(&'a self) -> &'a PackageId { + self.manifest.get_package_id() + } + pub fn get_name<'a>(&'a self) -> &'a str { - self.get_manifest().get_name() + self.get_package_id().get_name() } pub fn get_version<'a>(&'a self) -> &'a Version { - self.get_manifest().get_version() + self.get_package_id().get_version() } pub fn get_dependencies<'a>(&'a self) -> &'a [Dependency] { @@ -97,15 +101,11 @@ impl Package { pub fn get_absolute_target_dir(&self) -> Path { self.get_root().join(self.get_target_dir()) } - - pub fn is_for_name_ver(&self, name_ver: &NameVer) -> bool { - self.get_name() == name_ver.get_name() && self.get_version() == name_ver.get_version() - } } impl Show for Package { fn fmt(&self, f: &mut Formatter) -> fmt::Result { - write!(f, "{}", self.get_summary().get_name_ver()) + write!(f, "{}", self.get_summary().get_package_id()) } } diff --git a/src/cargo/core/package_id.rs b/src/cargo/core/package_id.rs new file mode 100644 index 000000000..8a0c1edf2 --- /dev/null +++ b/src/cargo/core/package_id.rs @@ -0,0 +1,70 @@ +use semver; +use std::fmt; +use std::fmt::{Show,Formatter}; +use serialize::{ + Encodable, + Encoder, + Decodable, + Decoder +}; + +trait ToVersion { + fn to_version(self) -> Option; +} + +impl ToVersion for semver::Version { + fn to_version(self) -> Option { + Some(self) + } +} + +impl<'a> ToVersion for &'a str { + fn to_version(self) -> Option { + semver::parse(self) + } +} + +#[deriving(Clone,PartialEq,PartialOrd)] +pub struct PackageId { + name: String, + version: semver::Version +} + +impl PackageId { + pub fn new(name: &str, version: T) -> PackageId { + PackageId { + name: name.to_str(), + version: version.to_version().unwrap() + } + } + + pub fn get_name<'a>(&'a self) -> &'a str { + self.name.as_slice() + } + + pub fn get_version<'a>(&'a self) -> &'a semver::Version { + &self.version + } +} + +impl Show for PackageId { + fn fmt(&self, f: &mut Formatter) -> fmt::Result { + write!(f, "{} v{}", self.name, self.version) + } +} + +impl> Decodable for PackageId { + fn decode(d: &mut D) -> Result { + let vector: Vec = try!(Decodable::decode(d)); + + Ok(PackageId::new( + vector.get(0).as_slice(), + semver::parse(vector.get(1).as_slice()).unwrap())) + } +} + +impl> Encodable for PackageId { + fn encode(&self, e: &mut S) -> Result<(), E> { + (vec!(self.name.clone(), self.version.to_str())).encode(e) + } +} diff --git a/src/cargo/core/resolver.rs b/src/cargo/core/resolver.rs index 51f7bee07..84d11d74c 100644 --- a/src/cargo/core/resolver.rs +++ b/src/cargo/core/resolver.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use core::{ Dependency, - NameVer, + PackageId, Summary, Registry }; @@ -11,7 +11,7 @@ use util::result::CargoResult; * - The correct input here is not a registry. Resolves should be performable * on package summaries vs. the packages themselves. */ -pub fn resolve(deps: &[Dependency], registry: &Registry) -> CargoResult> { +pub fn resolve(deps: &[Dependency], registry: &Registry) -> CargoResult> { let mut remaining = Vec::from_slice(deps); let mut resolve = HashMap::<&str, &Summary>::new(); @@ -19,7 +19,7 @@ pub fn resolve(deps: &[Dependency], registry: &Registry) -> CargoResult curr, None => { - return Ok(resolve.values().map(|summary| summary.get_name_ver().clone()).collect()); + return Ok(resolve.values().map(|summary| summary.get_package_id().clone()).collect()); } }; @@ -50,7 +50,7 @@ mod test { use core::{ Dependency, - NameVer, + PackageId, Summary }; @@ -62,17 +62,17 @@ mod test { ($name:expr => $($deps:expr),+) => ( { let d: Vec = vec!($($deps),+).iter().map(|s| Dependency::parse(*s, "1.0.0").unwrap()).collect(); - Summary::new(&NameVer::new($name, "1.0.0"), d.as_slice()) + Summary::new(&PackageId::new($name, "1.0.0"), d.as_slice()) } ); ($name:expr) => ( - Summary::new(&NameVer::new($name, "1.0.0"), []) + Summary::new(&PackageId::new($name, "1.0.0"), []) ) ) fn pkg(name: &str) -> Summary { - Summary::new(&NameVer::new(name, "1.0.0"), &[]) + Summary::new(&PackageId::new(name, "1.0.0"), &[]) } fn dep(name: &str) -> Dependency { @@ -83,9 +83,9 @@ mod test { pkgs } - fn names(names: &[&'static str]) -> Vec { + fn names(names: &[&'static str]) -> Vec { names.iter() - .map(|name| NameVer::new(*name, "1.0.0")) + .map(|name| PackageId::new(*name, "1.0.0")) .collect() } diff --git a/src/cargo/core/source.rs b/src/cargo/core/source.rs index 724fd5521..c77caa30c 100644 --- a/src/cargo/core/source.rs +++ b/src/cargo/core/source.rs @@ -1,4 +1,4 @@ -use core::{Summary,NameVer,Package}; +use core::{Summary,Package,PackageId}; use util::CargoResult; /** @@ -25,7 +25,7 @@ pub trait Source { * The download method fetches the full package for each name and * version specified. */ - fn download(&self, packages: &[NameVer]) -> CargoResult<()>; + fn download(&self, packages: &[PackageId]) -> CargoResult<()>; /** * The get method returns the Path of each specified package on the @@ -33,7 +33,7 @@ pub trait Source { * and that the packages are already locally available on the file * system. */ - fn get(&self, packages: &[NameVer]) -> CargoResult>; + fn get(&self, packages: &[PackageId]) -> CargoResult>; } impl Source for Vec> { @@ -56,7 +56,7 @@ impl Source for Vec> { Ok(ret) } - fn download(&self, packages: &[NameVer]) -> CargoResult<()> { + fn download(&self, packages: &[PackageId]) -> CargoResult<()> { for source in self.iter() { try!(source.download(packages)); } @@ -64,7 +64,7 @@ impl Source for Vec> { Ok(()) } - fn get(&self, packages: &[NameVer]) -> CargoResult> { + fn get(&self, packages: &[PackageId]) -> CargoResult> { let mut ret = Vec::new(); for source in self.iter() { diff --git a/src/cargo/core/summary.rs b/src/cargo/core/summary.rs index ec820efcc..0b3dfede7 100644 --- a/src/cargo/core/summary.rs +++ b/src/cargo/core/summary.rs @@ -1,33 +1,33 @@ use semver::Version; use core::{ Dependency, - NameVer + PackageId }; #[deriving(Show,Clone,PartialEq)] pub struct Summary { - name_ver: NameVer, + package_id: PackageId, dependencies: Vec } impl Summary { - pub fn new(name_ver: &NameVer, dependencies: &[Dependency]) -> Summary { + pub fn new(pkg_id: &PackageId, dependencies: &[Dependency]) -> Summary { Summary { - name_ver: name_ver.clone(), + package_id: pkg_id.clone(), dependencies: Vec::from_slice(dependencies) } } - pub fn get_name_ver<'a>(&'a self) -> &'a NameVer { - &self.name_ver + pub fn get_package_id<'a>(&'a self) -> &'a PackageId { + &self.package_id } pub fn get_name<'a>(&'a self) -> &'a str { - self.get_name_ver().get_name() + self.get_package_id().get_name() } pub fn get_version<'a>(&'a self) -> &'a Version { - self.get_name_ver().get_version() + self.get_package_id().get_version() } pub fn get_dependencies<'a>(&'a self) -> &'a [Dependency] { @@ -43,7 +43,7 @@ pub trait SummaryVec { impl SummaryVec for Vec { // TODO: Move to Registry fn names(&self) -> Vec { - self.iter().map(|summary| summary.name_ver.get_name().to_str()).collect() + self.iter().map(|summary| summary.get_name().to_str()).collect() } // TODO: Delete diff --git a/src/cargo/sources/git/source.rs b/src/cargo/sources/git/source.rs index 947f0e9a3..1c88f450f 100644 --- a/src/cargo/sources/git/source.rs +++ b/src/cargo/sources/git/source.rs @@ -1,6 +1,6 @@ use ops; use core::source::Source; -use core::{NameVer,Package,Summary}; +use core::{Package,PackageId,Summary}; use util::CargoResult; use sources::git::utils::{GitReference,GitRemote,Master,Other}; use std::fmt; @@ -44,15 +44,15 @@ impl Source for GitSource { Ok(vec!(pkg.get_summary().clone())) } - fn download(&self, _: &[NameVer]) -> CargoResult<()> { + fn download(&self, _: &[PackageId]) -> CargoResult<()> { Ok(()) } - fn get(&self, packages: &[NameVer]) -> CargoResult> { + fn get(&self, package_ids: &[PackageId]) -> CargoResult> { // TODO: Support multiple manifests per repo let pkg = try!(read_manifest(&self.checkout_path)); - if packages.iter().any(|nv| pkg.is_for_name_ver(nv)) { + if package_ids.iter().any(|pkg_id| pkg_id == pkg.get_package_id()) { Ok(vec!(pkg)) } else { Ok(vec!()) diff --git a/src/cargo/sources/path.rs b/src/cargo/sources/path.rs index f81061bf2..dcef3ed29 100644 --- a/src/cargo/sources/path.rs +++ b/src/cargo/sources/path.rs @@ -1,6 +1,6 @@ use std::fmt; use std::fmt::{Show,Formatter}; -use core::{NameVer,Package,Summary}; +use core::{Package,PackageId,Summary}; use core::source::Source; use ops; use util::{CargoResult}; @@ -37,15 +37,15 @@ impl Source for PathSource { }).collect()) } - fn download(&self, _: &[NameVer]) -> CargoResult<()>{ + fn download(&self, _: &[PackageId]) -> CargoResult<()>{ Ok(()) } - fn get(&self, name_vers: &[NameVer]) -> CargoResult> { + fn get(&self, name_vers: &[PackageId]) -> CargoResult> { Ok(self.paths.iter().filter_map(|path| { match read_manifest(path) { Ok(pkg) => { - if name_vers.iter().any(|nv| pkg.is_for_name_ver(nv)) { + if name_vers.iter().any(|pkg_id| pkg.get_package_id() == pkg_id) { Some(pkg) } else { None diff --git a/src/cargo/util/toml.rs b/src/cargo/util/toml.rs index 51e8221ff..7ed35501b 100644 --- a/src/cargo/util/toml.rs +++ b/src/cargo/util/toml.rs @@ -124,7 +124,7 @@ impl TomlManifest { } Ok(Manifest::new( - &Summary::new(&self.project.to_name_ver(), deps.as_slice()), + &Summary::new(&self.project.to_package_id(), deps.as_slice()), targets.as_slice(), &Path::new("target"))) }