diff options
| author | Joel Klinghed <the_jk@spawned.biz> | 2024-10-31 21:02:51 +0100 |
|---|---|---|
| committer | Joel Klinghed <the_jk@spawned.biz> | 2024-10-31 21:03:22 +0100 |
| commit | 542454c4056fb5361c982c5ecdd2aef38b9c6b9f (patch) | |
| tree | 0132c548deabf0aa06a0cba11f2c1646dbf77a74 /libs/local/src/main | |
| parent | 117353c64882dd9d88fbe6c1f2939d7f95564b02 (diff) | |
Make path returned by resolve more consistent
Diffstat (limited to 'libs/local/src/main')
| -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() } } |
