@Override public int getFileMode() { return FileMode.getFileMode(file); }
/** * Convert a set of mode bits into a FileMode enumerated value. * * @param bits the mode bits the caller has somehow obtained. * @return the FileMode instance that represents the given bits. */ public static final FileMode fromBits(final int bits) { switch (bits & TYPE_MASK) { case TYPE_MISSING: if (bits == 0) return MISSING; break; case TYPE_TREE: return TREE; case TYPE_FILE: if ((bits & 0111) != 0) return EXECUTABLE_FILE; return REGULAR_FILE; case TYPE_SYMLINK: return SYMLINK; case TYPE_GITLINK: return GITLINK; } return new FileMode(bits) { @Override public boolean equals(final int a) { return bits == a; } }; }
static void parse(final String instructions, final Set<PosixFilePermission> toAdd, final Set<PosixFilePermission> toRemove) { for (final String instruction : COMMA.split(instructions)) { parseOne(instruction, toAdd, toRemove); } }
/** * Build a permission change object from an instruction string * * @param instructions the instructions * @return a permission change object * @throws InvalidModeInstructionException instruction string is invalid * @throws UnsupportedOperationException an unsupported instruction was encountered while parsin */ public static PermissionsSet buildPermissionsSet(final String instructions) { Objects.requireNonNull(instructions); final Set<PosixFilePermission> toAdd = EnumSet.noneOf(PosixFilePermission.class); final Set<PosixFilePermission> toRemove = EnumSet.noneOf(PosixFilePermission.class); parse(instructions, toAdd, toRemove); return new PermissionsSet(toAdd, toRemove); }
@Override public ExtendedArchiveEntry createEntryFor(String entryName, Entry archiveEntry, boolean isExecutable) { ExtendedArchiveEntry entry = newEntry(entryName, archiveEntry); entry.setSize(archiveEntry.getSize()); // // If we have a valid file mode then use it for the entry we are creating if (archiveEntry.getFileMode() != -1) { entry.setFileMode(archiveEntry.getFileMode()); if (isExecutable) { entry.setFileMode(FileMode.makeExecutable(entry.getFileMode())); } } else { if (isExecutable) { entry.setFileMode(FileMode.EXECUTABLE_FILE.getBits()); } } return entry; } }
setFilePermissions(outputFile, FileMode.toPermissionsSet(mode)); } else { if (archiveEntry.isDirectory()) { setFilePermissions(outputFile, PosixModes.intModeToPosix(0755)); } else { setFilePermissions(outputFile, PosixModes.intModeToPosix(0644));
@Override public boolean isExecutable() { return FileMode.EXECUTABLE_FILE.equals(getFileMode()); }
if (isSet(mode, 0400)) { unix[1] = 'r'; if (isSet(mode, 0200)) { unix[2] = 'w'; if (isSet(mode, 0100)) { unix[3] = 'x'; if (isSet(mode, 040)) { unix[4] = 'r'; if (isSet(mode, 020)) { unix[5] = 'w'; if (isSet(mode, 010)) { unix[6] = 'x'; if (isSet(mode, 04)) { unix[7] = 'r'; if (isSet(mode, 02)) { unix[8] = 'w'; if (isSet(mode, 01)) { unix[9] = 'x';
static void parseOne(final String instruction, final Set<PosixFilePermission> toAdd, final Set<PosixFilePermission> toRemove) { final int plus = instruction.indexOf('+'); final int minus = instruction.indexOf('-'); if (plus < 0 && minus < 0) { throw new RuntimeException("Invalid unix mode expresson: '" + instruction + "'"); } final String who; final String what; final Set<PosixFilePermission> set; if (plus >= 0) { who = plus == 0 ? "ugo" : instruction.substring(0, plus); what = instruction.substring(plus + 1); set = toAdd; } else { // If it's not plusIndex it's minusIndex who = minus == 0 ? "ugo" : instruction.substring(0, minus); what = instruction.substring(minus + 1); set = toRemove; } if (what.isEmpty()) { throw new RuntimeException("Invalid unix mode expresson: '" + instruction + "'"); } modifySet(who, what, set, instruction); }
@Override public boolean isExecutable() { return FileMode.EXECUTABLE_FILE.equals(getFileMode()); }
public static Set<PosixFilePermission> toPermissionsSet(int mode) { Set<PosixFilePermission> result = EnumSet.noneOf(PosixFilePermission.class); if (isSet(mode, 0400)) { result.add(OWNER_READ); if (isSet(mode, 0200)) { result.add(OWNER_WRITE); if (isSet(mode, 0100)) { result.add(OWNER_EXECUTE); if (isSet(mode, 040)) { result.add(GROUP_READ); if (isSet(mode, 020)) { result.add(GROUP_WRITE); if (isSet(mode, 010)) { result.add(GROUP_EXECUTE); if (isSet(mode, 04)) { result.add(OTHERS_READ); if (isSet(mode, 02)) { result.add(OTHERS_WRITE); if (isSet(mode, 01)) { result.add(OTHERS_EXECUTE);