Skip to content

Commit 84825d6

Browse files
authored
Update parents command to show source mismatch and warn about override (#80)
* Update parents command to show source mismatch and warn about override * update changelog * update dependency source matching from config
1 parent 8dc9f07 commit 84825d6

File tree

3 files changed

+61
-15
lines changed

3 files changed

+61
-15
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
66

77
## Unreleased
8+
### Added
9+
- `parents` command outputs more detail:
10+
- source information in case multiple dependencies do not match
11+
- information about an override if one is present
12+
813
### Changed
914
- Interpret all dependency names as lowercase to reduce ambiguity
1015

src/cmd/parents.rs

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use tabwriter::TabWriter;
1010
use tokio_core::reactor::Core;
1111

1212
use crate::error::*;
13-
use crate::sess::DependencyConstraint;
13+
use crate::sess::{DependencyConstraint, DependencySource};
1414
use crate::sess::{Session, SessionIo};
1515

1616
/// Assemble the `parents` subcommand.
@@ -32,13 +32,20 @@ pub fn run(sess: &Session, matches: &ArgMatches) -> Result<()> {
3232
let io = SessionIo::new(&sess, core.handle());
3333

3434
let parent_array = {
35-
let mut map = HashMap::<String, String>::new();
35+
let mut map = HashMap::<String, Vec<String>>::new();
3636
if sess.manifest.dependencies.contains_key(dep) {
3737
let dep_str = format!(
3838
"{}",
3939
DependencyConstraint::from(&sess.manifest.dependencies[dep])
4040
);
41-
map.insert(sess.manifest.package.name.clone(), dep_str);
41+
let dep_source = format!(
42+
"{}",
43+
DependencySource::from(&sess.manifest.dependencies[dep])
44+
);
45+
map.insert(
46+
sess.manifest.package.name.clone(),
47+
vec![dep_str, dep_source],
48+
);
4249
}
4350
for (&pkg, deps) in sess.graph().iter() {
4451
let pkg_name = sess.dependency_name(pkg);
@@ -55,10 +62,16 @@ pub fn run(sess: &Session, matches: &ArgMatches) -> Result<()> {
5562
if dep_manifest.dependencies.contains_key(dep) {
5663
map.insert(
5764
pkg_name.to_string(),
58-
format!(
59-
"{}",
60-
DependencyConstraint::from(&dep_manifest.dependencies[dep])
61-
),
65+
vec![
66+
format!(
67+
"{}",
68+
DependencyConstraint::from(&dep_manifest.dependencies[dep])
69+
),
70+
format!(
71+
"{}",
72+
DependencySource::from(&dep_manifest.dependencies[dep])
73+
),
74+
],
6275
);
6376
} else {
6477
// Filter out dependencies with mismatching manifest
@@ -74,15 +87,37 @@ pub fn run(sess: &Session, matches: &ArgMatches) -> Result<()> {
7487
println!("No parents found for {}.", dep);
7588
} else {
7689
println!("Parents found:");
90+
let source = &parent_array.values().next().unwrap()[1];
91+
let mut constant_source = true;
92+
for (_, v) in parent_array.iter() {
93+
if &v[1] != source {
94+
constant_source = false;
95+
break;
96+
}
97+
}
7798
let mut res = String::from("");
78-
for (k, v) in parent_array.iter() {
79-
res.push_str(&format!(" {}\trequires: {}\n", k, v).to_string());
99+
if constant_source {
100+
for (k, v) in parent_array.iter() {
101+
res.push_str(&format!(" {}\trequires: {}\n", k, v[0]).to_string());
102+
}
103+
} else {
104+
for (k, v) in parent_array.iter() {
105+
res.push_str(&format!(" {}\trequires: {}\tat {}\n", k, v[0], v[1]).to_string());
106+
}
80107
}
81108
let mut tw = TabWriter::new(vec![]);
82109
write!(&mut tw, "{}", res).unwrap();
83110
tw.flush().unwrap();
84111
print!("{}", String::from_utf8(tw.into_inner().unwrap()).unwrap());
85112
}
86113

114+
if sess.config.overrides.contains_key(dep) {
115+
warnln!(
116+
"An override is configured for {} to {:?}",
117+
dep,
118+
sess.config.overrides[dep]
119+
)
120+
}
121+
87122
Ok(())
88123
}

src/sess.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,7 @@ impl<'sess, 'ctx: 'sess> Session<'ctx> {
129129
cfg,
130130
manifest.package.name
131131
);
132-
let src = match *cfg {
133-
config::Dependency::Version(_) => DependencySource::Registry,
134-
config::Dependency::Path(ref p) => DependencySource::Path(p.clone()),
135-
config::Dependency::GitRevision(ref g, _)
136-
| config::Dependency::GitVersion(ref g, _) => DependencySource::Git(g.clone()),
137-
};
132+
let src = DependencySource::from(cfg);
138133
self.deps
139134
.lock()
140135
.unwrap()
@@ -1383,6 +1378,17 @@ pub enum DependencySource {
13831378
Git(String),
13841379
}
13851380

1381+
impl<'a> From<&'a config::Dependency> for DependencySource {
1382+
fn from(cfg: &'a config::Dependency) -> DependencySource {
1383+
match *cfg {
1384+
config::Dependency::Path(ref path) => DependencySource::Path(path.clone()),
1385+
config::Dependency::GitRevision(ref url, _) => DependencySource::Git(url.clone()),
1386+
config::Dependency::GitVersion(ref url, _) => DependencySource::Git(url.clone()),
1387+
config::Dependency::Version(_) => DependencySource::Registry,
1388+
}
1389+
}
1390+
}
1391+
13861392
impl fmt::Display for DependencySource {
13871393
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13881394
match *self {

0 commit comments

Comments
 (0)