forked from Fediversity/Fediversity
fix relative path computation
This commit is contained in:
parent
0e7eef5ea2
commit
f67c012dfe
|
@ -99,20 +99,22 @@ rec {
|
||||||
relativePath = path1': path2':
|
relativePath = path1': path2':
|
||||||
let
|
let
|
||||||
inherit (lib.path) subpath;
|
inherit (lib.path) subpath;
|
||||||
inherit (lib) lists;
|
inherit (lib) lists length take drop min max;
|
||||||
|
|
||||||
path1 = subpath.components path1';
|
path1 = subpath.components path1';
|
||||||
prefix1 = with lib; take (length path1 - 1) path1;
|
prefix1 = take (length path1 - 1) path1;
|
||||||
path2 = subpath.components path2';
|
path2 = subpath.components path2';
|
||||||
prefix2 = with lib; take (length path2 - 1) path2;
|
prefix2 = take (length path2 - 1) path2;
|
||||||
|
|
||||||
commonPrefixLength = with lists;
|
commonPrefixLength = with lists;
|
||||||
findFirstIndex (i: i.fst != i.snd)
|
findFirstIndex (i: i.fst != i.snd)
|
||||||
(length prefix1)
|
(min (length prefix1) (length prefix2))
|
||||||
(zipLists prefix1 prefix2);
|
(zipLists prefix1 prefix2);
|
||||||
|
|
||||||
|
depth = max 0 (length prefix1 - commonPrefixLength);
|
||||||
|
|
||||||
relativeComponents = with lists;
|
relativeComponents = with lists;
|
||||||
[ "." ] ++ (replicate (length prefix1 - commonPrefixLength) "..") ++ (drop commonPrefixLength path2);
|
[ "." ] ++ (replicate depth "..") ++ (drop commonPrefixLength path2);
|
||||||
in
|
in
|
||||||
join "/" relativeComponents;
|
join "/" relativeComponents;
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,18 @@ let
|
||||||
inherit (import ./. { }) lib;
|
inherit (import ./. { }) lib;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
test-relativePath = {
|
test-relativePath = with lib;
|
||||||
expr = with lib; relativePath "bar" "baz";
|
let
|
||||||
expected = "./baz";
|
testData = [
|
||||||
};
|
{ from = "bar"; to = "baz"; expected = "./baz"; }
|
||||||
|
{ from = "foo/bar"; to = "foo/baz"; expected = "./baz"; }
|
||||||
|
{ from = "foo"; to = "bar/baz"; expected = "./bar/baz"; }
|
||||||
|
{ from = "foo/bar"; to = "baz"; expected = "./../baz"; }
|
||||||
|
{ from = "foo/bar/baz"; to = "foo"; expected = "./../../foo"; }
|
||||||
|
];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
expr = map (case: relativePath case.from case.to) testData;
|
||||||
|
expected = map (case: case.expected) testData;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue