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 | |
| parent | 117353c64882dd9d88fbe6c1f2939d7f95564b02 (diff) | |
Make path returned by resolve more consistent
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/local/src/main/java/org/the_jk/cleversync/io/local/PathLink.kt | 28 | ||||
| -rw-r--r-- | libs/test-utils/src/main/java/org/the_jk/cleversync/TreeAbstractTest.kt | 10 |
2 files changed, 25 insertions, 13 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() } } diff --git a/libs/test-utils/src/main/java/org/the_jk/cleversync/TreeAbstractTest.kt b/libs/test-utils/src/main/java/org/the_jk/cleversync/TreeAbstractTest.kt index 0890199..a82001c 100644 --- a/libs/test-utils/src/main/java/org/the_jk/cleversync/TreeAbstractTest.kt +++ b/libs/test-utils/src/main/java/org/the_jk/cleversync/TreeAbstractTest.kt @@ -175,7 +175,7 @@ abstract class TreeAbstractTest { when (target) { is Link.DirectoryTarget -> { assertThat(target.directory).isEqualTo(dir) - assertThat(target.path).endsWith("dir") + assertThat(target.path).isEqualTo("dir") } is Link.FileTarget -> Assert.fail() is Link.NoTarget -> Assert.fail() @@ -187,7 +187,7 @@ abstract class TreeAbstractTest { when (target) { is Link.DirectoryTarget -> Assert.fail() is Link.FileTarget -> Assert.fail() - is Link.NoTarget -> assertThat(target.path).endsWith("file") + is Link.NoTarget -> assertThat(target.path).isEqualTo("file") } file.write().use { it.write(1) } target = link.resolve() @@ -195,7 +195,7 @@ abstract class TreeAbstractTest { is Link.DirectoryTarget -> Assert.fail() is Link.FileTarget -> { assertThat(target.file).isEqualTo(file) - assertThat(target.path).endsWith("file") + assertThat(target.path).isEqualTo("file") } is Link.NoTarget -> Assert.fail() } @@ -233,7 +233,7 @@ abstract class TreeAbstractTest { when (val target = link1.resolve()) { is Link.DirectoryTarget -> { assertThat(target.directory).isEqualTo(bar) - assertThat(target.path).endsWith("foo/bar") + assertThat(target.path).isEqualTo("foo/bar") } else -> Assert.fail() } @@ -241,7 +241,7 @@ abstract class TreeAbstractTest { when (val target = link3.resolve()) { is Link.DirectoryTarget -> { assertThat(target.directory).isEqualTo(bar) - assertThat(target.path).endsWith("../link1") + assertThat(target.path).isEqualTo("../link1") } else -> Assert.fail() } |
