git_clone_canonical/
repopath.rs

1use crate::Url;
2use std::convert::AsRef;
3use std::path::{Path, PathBuf};
4
5pub fn get_repo_path<P>(basedir: P, url: &Url) -> PathBuf
6where
7    P: AsRef<Path>,
8{
9    let mut path = basedir.as_ref().to_path_buf();
10    path.push(url.domain());
11    let mut segments = url.path_segments().peekable();
12    while let Some(segment) = segments.next() {
13        let segment = if segments.peek().is_none() {
14            segment.strip_suffix(".git").unwrap_or(segment)
15        } else {
16            segment
17        };
18        path.push(segment);
19    }
20    path
21}
22
23#[cfg(test)]
24mod tests;