diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/ModifyWorkerHelper.java b/scm-core/src/main/java/sonia/scm/repository/spi/ModifyWorkerHelper.java index 875e06334a..fe19523261 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/ModifyWorkerHelper.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/ModifyWorkerHelper.java @@ -12,13 +12,8 @@ import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.NoSuchFileException; import java.nio.file.Path; -import java.nio.file.attribute.PosixFilePermission; -import java.util.Optional; -import java.util.Set; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; -import static java.util.Optional.empty; -import static java.util.Optional.of; import static sonia.scm.AlreadyExistsException.alreadyExists; import static sonia.scm.ContextEntry.ContextBuilder.entity; import static sonia.scm.NotFoundException.notFound; @@ -66,34 +61,14 @@ public interface ModifyWorkerHelper extends ModifyCommand.Worker { if (!targetFile.toFile().exists()) { throw notFound(createFileContext(path)); } - Optional> posixFilePermissions = getPosixFilePermissions(targetFile); + boolean executable = Files.isExecutable(targetFile); Files.move(file.toPath(), targetFile, REPLACE_EXISTING); - posixFilePermissions.ifPresent(permissions -> setPosixFilePermissions(targetFile, permissions)); + if (targetFile.toFile().setExecutable(executable)) { + LOG.warn("could not set executable flag for file {}", targetFile); + } addFileToScm(path, targetFile); } - default Optional> getPosixFilePermissions(Path targetFile) { - try { - return of(Files.getPosixFilePermissions(targetFile)); - } catch (UnsupportedOperationException e) { - LOG.trace("posix file permissions not supported"); - return empty(); - } catch (IOException e) { - LOG.info("could not read posix file permissions for file {}", targetFile); - return empty(); - } - } - - default void setPosixFilePermissions(Path targetFile, Set permissions) { - try { - Files.setPosixFilePermissions(targetFile, permissions); - } catch (UnsupportedOperationException e) { - LOG.trace("posix file permissions not supported"); - } catch (IOException e) { - LOG.info("could not write posix file permissions to file {}", targetFile); - } - } - void addFileToScm(String name, Path file); default ContextEntry.ContextBuilder createFileContext(String path) { diff --git a/scm-core/src/test/java/sonia/scm/repository/spi/ModifyWorkerHelperTest.java b/scm-core/src/test/java/sonia/scm/repository/spi/ModifyWorkerHelperTest.java index c2996429a1..1455b300d2 100644 --- a/scm-core/src/test/java/sonia/scm/repository/spi/ModifyWorkerHelperTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/spi/ModifyWorkerHelperTest.java @@ -1,7 +1,5 @@ package sonia.scm.repository.spi; -import com.google.common.collect.ImmutableSet; -import org.assertj.core.api.Assumptions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junitpioneer.jupiter.TempDirectory; @@ -10,16 +8,8 @@ import sonia.scm.repository.Repository; import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.nio.file.Files; import java.nio.file.Path; -import static java.nio.file.attribute.PosixFilePermission.GROUP_EXECUTE; -import static java.nio.file.attribute.PosixFilePermission.GROUP_READ; -import static java.nio.file.attribute.PosixFilePermission.OTHERS_EXECUTE; -import static java.nio.file.attribute.PosixFilePermission.OTHERS_READ; -import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE; -import static java.nio.file.attribute.PosixFilePermission.OWNER_READ; -import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE; import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(TempDirectory.class) @@ -31,19 +21,13 @@ class ModifyWorkerHelperTest { File target = createFile(temp, "executable.sh"); File newFile = createFile(temp, "other"); - Assumptions.assumeThatThrownBy(() -> { - Files.setPosixFilePermissions(target.toPath(), - ImmutableSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, GROUP_READ, GROUP_EXECUTE, OTHERS_READ, OTHERS_EXECUTE)); - Files.setPosixFilePermissions(newFile.toPath(), - ImmutableSet.of(OWNER_READ, OWNER_WRITE, GROUP_READ, OTHERS_READ)); - }).doesNotThrowAnyException(); // ignore this test on systems that does not support posix file permissions + target.setExecutable(true); ModifyWorkerHelper helper = new MinimalModifyWorkerHelper(temp); helper.modify("executable.sh", newFile); - assertThat(Files.getPosixFilePermissions(target.toPath())) - .contains(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, GROUP_READ, GROUP_EXECUTE, OTHERS_READ, OTHERS_EXECUTE); + assertThat(target.canExecute()).isTrue(); } private File createFile(Path temp, String fileName) throws IOException {