in java/io/bazel/rules/closure/Webpath.java [317:345]
public Webpath relativize(Webpath other) {
checkArgument(isAbsolute() == other.isAbsolute(), "'other' is different type of Path");
if (path.isEmpty()) {
return other;
}
PeekingIterator<String> left = Iterators.peekingIterator(split());
PeekingIterator<String> right = Iterators.peekingIterator(other.split());
while (left.hasNext() && right.hasNext()) {
if (!left.peek().equals(right.peek())) {
break;
}
left.next();
right.next();
}
StringBuilder result = new StringBuilder(path.length() + other.path.length());
while (left.hasNext()) {
result.append(PARENT_DIR);
result.append(SEPARATOR);
left.next();
}
while (right.hasNext()) {
result.append(right.next());
result.append(SEPARATOR);
}
if (result.length() > 0 && !other.hasTrailingSeparator()) {
result.deleteCharAt(result.length() - 1);
}
return new Webpath(result.toString());
}