in src/api/sync.rs [382:415]
fn make_relative(src: &Path, dst: &Path) -> PathBuf {
let path = src;
let base = dst;
assert_eq!(
path.is_absolute(),
base.is_absolute(),
"This function is made to look at absolute paths only"
);
let mut ita = path.components();
let mut itb = base.components();
loop {
match (ita.next(), itb.next()) {
(Some(a), Some(b)) if a == b => (),
(some_a, _) => {
// Ignoring b, because 1 component is the filename
// for which we don't need to go back up for relative
// filename to work.
let mut new_path = PathBuf::new();
for _ in itb {
new_path.push(Component::ParentDir);
}
if let Some(a) = some_a {
new_path.push(a);
for comp in ita {
new_path.push(comp);
}
}
return new_path;
}
}
}
}