diff options
Diffstat (limited to 'libs/local')
| -rw-r--r-- | libs/local/src/main/java/org/the_jk/cleversync/io/local/PathLink.kt | 28 |
1 files changed, 20 insertions, 8 deletions
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<Path, String> { + 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() } } |
