Don't panic when printing the precise source id

Closes #2094
This commit is contained in:
Alex Crichton 2015-10-31 10:03:18 -07:00
parent 3367b9c52d
commit 1ad6f785ca
2 changed files with 16 additions and 7 deletions

View file

@ -1,4 +1,4 @@
use std::cmp::Ordering;
use std::cmp::{self, Ordering};
use std::collections::hash_map::{HashMap, Values, IterMut};
use std::fmt::{self, Formatter};
use std::hash;
@ -294,14 +294,12 @@ impl fmt::Display for SourceId {
ref precise, .. } => {
try!(write!(f, "{}{}", url, url_ref(reference)));
match *precise {
Some(ref s) => {
try!(write!(f, "#{}", &s[..8]));
}
None => {}
if let Some(ref s) = *precise {
let len = cmp::min(s.len(), 8);
try!(write!(f, "#{}", &s[..len]));
}
Ok(())
},
}
SourceIdInner { kind: Kind::Registry, ref url, .. } => {
write!(f, "registry {}", url)
}

View file

@ -647,6 +647,17 @@ test!(update_with_shared_deps {
.arg("-p").arg("dep1"),
execs().with_stdout(""));
// Don't do anything bad on a weird --precise argument
println!("bar bad precise update");
assert_that(p.cargo("update")
.arg("-p").arg("bar")
.arg("--precise").arg("0.1.2"),
execs().with_status(101).with_stderr("\
Unable to update [..]
To learn more, run the command again with --verbose.
"));
// Specifying a precise rev to the old rev shouldn't actually update
// anything because we already have the rev in the db.
println!("bar precise update");