diff options
author | Kornel <kornel@geekhood.net> | 2019-02-04 02:01:22 +0100 |
---|---|---|
committer | Kornel <kornel@geekhood.net> | 2019-02-04 02:01:22 +0100 |
commit | 46175c7a75317b3dda81a99da47cefe238b245d8 (patch) | |
tree | 97f8dfdb24f956be76d03c5f919d386dc399cf21 | |
parent | 683585d022b9c0250b34e4c0b7a366477c71e66b (diff) |
Partial support for dependency package field
m--------- | cargo_toml | 0 | ||||
-rw-r--r-- | front_end/src/crate_page.rs | 2 | ||||
-rw-r--r-- | front_end/src/urler.rs | 2 | ||||
-rw-r--r-- | front_end/templates/deps_list.rs.html | 2 | ||||
-rw-r--r-- | kitchen_sink/src/index.rs | 15 | ||||
-rw-r--r-- | kitchen_sink/src/lib_kitchen_sink.rs | 4 | ||||
-rw-r--r-- | rich_crate/Cargo.toml | 2 | ||||
-rw-r--r-- | rich_crate/src/rich_crate_version.rs | 18 |
8 files changed, 24 insertions, 21 deletions
diff --git a/cargo_toml b/cargo_toml -Subproject 97897d27f9a692e6040bf8df0b6bda12d76a4a3 +Subproject 545d7341e6849600fb0cfd2067bcb3cc7f1e3c6 diff --git a/front_end/src/crate_page.rs b/front_end/src/crate_page.rs index d93fe32..70ac3be 100644 --- a/front_end/src/crate_page.rs +++ b/front_end/src/crate_page.rs @@ -276,7 +276,7 @@ impl<'a> CratePage<'a> { } pub fn up_to_date_class(&self, richdep: &RichDep) -> &str { - let (matches_latest, pop) = richdep.dep.req().parse().ok().map(|req| self.kitchen_sink.version_popularity(&richdep.name, &req)).unwrap_or((false, 0.)); + let (matches_latest, pop) = richdep.dep.req().parse().ok().map(|req| self.kitchen_sink.version_popularity(&richdep.package, &req)).unwrap_or((false, 0.)); match pop { x if x >= 0.5 && matches_latest => "top", x if x >= 0.75 || matches_latest => "common", diff --git a/front_end/src/urler.rs b/front_end/src/urler.rs index d730ff1..367778e 100644 --- a/front_end/src/urler.rs +++ b/front_end/src/urler.rs @@ -17,7 +17,7 @@ impl Urler { /// Link to a dependency of a crate pub fn dependency(&self, dep: &RichDep) -> String { - format!("/crates/{}", encode(&dep.name)) + format!("/crates/{}", encode(&dep.package)) } /// Summary of all dependencies diff --git a/front_end/templates/deps_list.rs.html b/front_end/templates/deps_list.rs.html index c4dbebb..3137bbb 100644 --- a/front_end/templates/deps_list.rs.html +++ b/front_end/templates/deps_list.rs.html @@ -29,6 +29,6 @@ <span class="cfg k">@t</span> } } - <a href="@url.dependency(d)">@d.name</a> <span class="version @c.up_to_date_class(d)">@c.pretty_print_req(d.dep.req())</span>@for f in d.dep.req_features() {<span class="with-feature"><wbr>+<span>@f</span></span>} + <a href="@url.dependency(d)">@d.package</a> <span class="version @c.up_to_date_class(d)">@c.pretty_print_req(d.dep.req())</span>@for f in d.dep.req_features() {<span class="with-feature"><wbr>+<span>@f</span></span>} </li> } diff --git a/kitchen_sink/src/index.rs b/kitchen_sink/src/index.rs index 08a8e91..8d50a0b 100644 --- a/kitchen_sink/src/index.rs +++ b/kitchen_sink/src/index.rs @@ -164,13 +164,15 @@ impl Index { let mut set: FxHashMap<DepName, (_, _, SemVer, FxHashSet<String>)> = FxHashMap::with_capacity_and_hasher(60, Default::default()); for d in ver.dependencies() { + let package = d.package().unwrap_or_else(|| d.name()); + // people forget to include winapi conditionally - let is_target_specific = d.name() == "winapi" || d.target().is_some(); + let is_target_specific = package == "winapi" || d.target().is_some(); if !wants.all_targets && is_target_specific { continue; // FIXME: allow common targets? } // hopefully nobody uses clippy at runtime, they just fail to make it dev dep - if !wants.dev && d.name() == "clippy" && d.is_optional() { + if !wants.dev && package == "clippy" && d.is_optional() { continue; } @@ -181,17 +183,16 @@ impl Index { _ => continue, } - let enable_dep_features = to_enable.get(d.name()); + let enable_dep_features = to_enable.get(package); if d.is_optional() && enable_dep_features.is_none() { continue; } let req = VersionReq::parse(d.requirement()).map_err(|_| KitchenSinkErr::SemverParsingError)?; - let name = d.name(); - let krate = match self.crates_io_crate_by_name(&Origin::from_crates_io_name(name)) { + let krate = match self.crates_io_crate_by_name(&Origin::from_crates_io_name(package)) { Ok(k) => k, Err(e) => { - eprintln!("{}@{} depends on missing crate {} (@{}): {}", ver.name(), ver.version(), name, req, e); + eprintln!("{}@{} depends on missing crate {} (@{}): {}", ver.name(), ver.version(), package, req, e); continue; }, }; @@ -210,7 +211,7 @@ impl Index { let key = { let mut inter = self.inter.write().unwrap(); - (inter.get_or_intern(name), inter.get_or_intern(matched.version())) + (inter.get_or_intern(package), inter.get_or_intern(matched.version())) }; let (_, _, _, all_features) = set.entry(key) diff --git a/kitchen_sink/src/lib_kitchen_sink.rs b/kitchen_sink/src/lib_kitchen_sink.rs index b7c7fc3..72a2085 100644 --- a/kitchen_sink/src/lib_kitchen_sink.rs +++ b/kitchen_sink/src/lib_kitchen_sink.rs @@ -918,10 +918,10 @@ impl KitchenSink { // runtime and (lesser) build-time deps for (deps, overall_weight) in all_deps.iter() { for dep in deps { - if let Some(rev) = deps_stats.counts.get(dep.name.as_str()) { + if let Some(rev) = deps_stats.counts.get(dep.package.as_str()) { if rev.direct > 1 && rev.direct < 150 && rev.runtime.0 < 500 && rev.runtime.1 < 800 { let weight = overall_weight / (1 + rev.direct) as f32; - weighed_deps.push((dep.name.as_str(), weight)); + weighed_deps.push((dep.package.as_str(), weight)); } } } diff --git a/rich_crate/Cargo.toml b/rich_crate/Cargo.toml index 6fd52d2..f6fb856 100644 --- a/rich_crate/Cargo.toml +++ b/rich_crate/Cargo.toml @@ -13,7 +13,7 @@ render_readme = { git = "https://gitlab.com/crates.rs/render_readme.git", versio categories = { git = "https://gitlab.com/crates.rs/categories.git" } udedokei = { git = "https://gitlab.com/crates.rs/udedokei.git" } cargo_author = "1.0.0" -cargo_toml = "0.6.0" +cargo_toml = "0.6.4" repo_url = { git = "https://gitlab.com/crates.rs/repo_url.git" } semver = "0.9.0" parse_cfg = "2.0.0" diff --git a/rich_crate/src/rich_crate_version.rs b/rich_crate/src/rich_crate_version.rs index e39934c..d8563d3 100644 --- a/rich_crate/src/rich_crate_version.rs +++ b/rich_crate/src/rich_crate_version.rs @@ -330,8 +330,9 @@ impl RichCrateVersion { /// Runtime, dev, build pub fn dependencies(&self) -> Result<(Vec<RichDep>, Vec<RichDep>, Vec<RichDep>), CfgErr> { fn to_dep((name, dep): (&String, &Dependency)) -> (String, RichDep) { - (name.to_owned(), RichDep { - name: name.to_owned(), + let package = dep.package().unwrap_or(&name).to_owned(); + (package.clone(), RichDep { + package, dep: dep.clone(), only_for_features: Vec::new(), only_for_targets: Vec::new(), @@ -343,13 +344,14 @@ impl RichCrateVersion { let mut dev: BTreeMap<String, RichDep> = self.dev_dependencies.iter().map(to_dep).collect(); fn add_targets(dest: &mut BTreeMap<String, RichDep>, src: &DepsSet, target: &str) -> Result<(), CfgErr> { - for (k, v) in src { + for (name, dep) in src { use std::collections::btree_map::Entry::*; - match dest.entry(k.to_string()) { + let package = dep.package().unwrap_or(&name); + match dest.entry(package.to_string()) { Vacant(e) => { e.insert(RichDep { - name: k.to_owned(), - dep: v.to_owned(), + package: package.to_string(), + dep: dep.clone(), only_for_targets: vec![target.parse()?], only_for_features: Vec::new(), with_features: Vec::new(), @@ -406,7 +408,7 @@ impl RichCrateVersion { dep.sort_by(|a,b| { a.dep.optional().cmp(&b.dep.optional()) .then(a.only_for_targets.is_empty().cmp(&b.only_for_targets.is_empty())) - .then(a.name.cmp(&b.name)) + .then(a.package.cmp(&b.package)) }); dep } @@ -460,7 +462,7 @@ impl RichCrateVersion { } pub struct RichDep { - pub name: String, + pub package: String, pub dep: Dependency, /// it's optional, used only for a platform pub only_for_targets: Vec<Target>, |