Skip to content

Commit

Permalink
Account for trailing / in URLs when determining on-disk location. Fixes
Browse files Browse the repository at this point in the history
#84.

No tests because there's no preexisting network tests.
  • Loading branch information
brson committed Jun 28, 2014
1 parent 0bcf18d commit 541a060
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion src/cargo/sources/git/source.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,13 @@ fn ident(location: &Location) -> String {
let last = path.components().last().unwrap();
str::from_utf8(last).unwrap().to_str()
}
Remote(ref url) => url.path.as_slice().split('/').last().unwrap().to_str()
Remote(ref url) => {
// Remove the trailing '/' so that 'split' doesn't give us
// an empty string, making '../foo/' and '../foo' both
// result in the name 'foo' (#84)
let path = strip_trailing_slash(url.path.as_slice());
path.split('/').last().unwrap().to_str()
}
};

let ident = if ident.as_slice() == "" {
Expand All @@ -79,6 +85,14 @@ fn ident(location: &Location) -> String {
format!("{}-{}", ident, to_hex(hasher.hash(&location.to_str())))
}

fn strip_trailing_slash<'a>(path: &'a str) -> &'a str {
if path.as_bytes().last() != Some(&('/' as u8)) {
path.clone()
} else {
path.slice(0, path.len() - 1)
}
}

impl<'a, 'b> Show for GitSource<'a, 'b> {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
try!(write!(f, "git repo at {}", self.remote.get_location()));
Expand Down

0 comments on commit 541a060

Please sign in to comment.