From 542454c4056fb5361c982c5ecdd2aef38b9c6b9f Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Thu, 31 Oct 2024 21:02:51 +0100 Subject: Make path returned by resolve more consistent --- .../org/the_jk/cleversync/io/local/PathLink.kt | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'libs/local/src') diff --git a/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathLink.kt b/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathLink.kt index 87ab71a..86b2e36 100644 --- a/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathLink.kt +++ b/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathLink.kt @@ -17,13 +17,16 @@ internal class PathLink( private val pathWatcher: PathWatcher, ) : ModifiableLink { override fun modifiableResolve(): ModifiableLink.ModifiableLinkTarget { - val target = path.readSymbolicLink() + val (target, targetPath) = readLink() return if (target.isDirectory()) { - ModifiableLink.ModifiableDirectoryTarget(target.toString(), PathDirectory(target.toRealPath(), pathWatcher)) + ModifiableLink.ModifiableDirectoryTarget( + targetPath, + PathDirectory(target.toRealPath(), pathWatcher), + ) } else if (target.isRegularFile()) { - ModifiableLink.ModifiableFileTarget(target.toString(), PathFile(target.toRealPath())) + ModifiableLink.ModifiableFileTarget(targetPath, PathFile(target.toRealPath())) } else { - ModifiableLink.NoTarget(target.toString()) + ModifiableLink.NoTarget(targetPath) } } @@ -50,13 +53,22 @@ internal class PathLink( override fun toString() = path.toString() override fun resolve(): Link.LinkTarget { - val target = path.readSymbolicLink() + val (target, targetPath) = readLink() return if (target.isDirectory()) { - Link.DirectoryTarget(target.toString(), PathDirectory(target.toRealPath(), pathWatcher)) + Link.DirectoryTarget(targetPath, PathDirectory(target.toRealPath(), pathWatcher)) } else if (target.isRegularFile()) { - Link.FileTarget(target.toString(), PathFile(target.toRealPath())) + Link.FileTarget(targetPath, PathFile(target.toRealPath())) } else { - Link.NoTarget(target.toString()) + Link.NoTarget(targetPath) + } + } + + private fun readLink(): Pair { + val target = path.readSymbolicLink() + val rel = path.parent.relativize(target) + if (rel.name.isEmpty()) { + return target to "${path.relativize(target)}/${target.name}" } + return target to rel.toString() } } -- cgit v1.2.3-70-g09d2