summaryrefslogtreecommitdiff
path: root/libs/local/src/main
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2024-10-31 21:02:51 +0100
committerJoel Klinghed <the_jk@spawned.biz>2024-10-31 21:03:22 +0100
commit542454c4056fb5361c982c5ecdd2aef38b9c6b9f (patch)
tree0132c548deabf0aa06a0cba11f2c1646dbf77a74 /libs/local/src/main
parent117353c64882dd9d88fbe6c1f2939d7f95564b02 (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.kt28
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()
}
}