in deploy-runner-agent/src/main/java/jetbrains/buildServer/deployer/agent/ssh/scp/FileScpOperation.java [47:103]
int getPermissionsFromFile(File file) throws IOException {
Set<PosixFilePermission> permission;
try {
permission = Files.getPosixFilePermissions(file.toPath(), LinkOption.NOFOLLOW_LINKS);
} catch (UnsupportedOperationException e) {
logger.warn("Filesystem doesn't support POSIX file attributes, rolling back to generics.");
permission = new HashSet<>();
if (Files.isExecutable(file.toPath())) {
permission.add(OWNER_EXECUTE);
permission.add(GROUP_EXECUTE);
permission.add(OTHERS_EXECUTE);
}
if (Files.isReadable(file.toPath())) {
permission.add(OWNER_READ);
permission.add(GROUP_READ);
permission.add(OTHERS_READ);
}
if (Files.isWritable(file.toPath())) {
permission.add(OWNER_WRITE);
permission.add(GROUP_WRITE);
permission.add(OTHERS_WRITE);
}
}
AtomicInteger permissionInt = new AtomicInteger(0);
permission.forEach(p -> {
switch (p) {
case OWNER_READ:
permissionInt.updateAndGet(i -> i | 256);
break;
case OWNER_WRITE:
permissionInt.updateAndGet(i -> i | 128);
break;
case OWNER_EXECUTE:
permissionInt.updateAndGet(i -> i | 64);
break;
case GROUP_READ:
permissionInt.updateAndGet(i -> i | 32);
break;
case GROUP_WRITE:
permissionInt.updateAndGet(i -> i | 16);
break;
case GROUP_EXECUTE:
permissionInt.updateAndGet(i -> i | 8);
break;
case OTHERS_READ:
permissionInt.updateAndGet(i -> i | 4);
break;
case OTHERS_WRITE:
permissionInt.updateAndGet(i -> i | 2);
break;
case OTHERS_EXECUTE:
permissionInt.updateAndGet(i -> i | 1);
break;
}
});
return permissionInt.get();
}