git_clone_canonical/
repopath.rs1use 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;