Skip to content

Commit ccff6e1

Browse files
authored
Make Unix launch scripts executable (#319)
1 parent 7049571 commit ccff6e1

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

src/main/java/net/neoforged/moddevgradle/internal/CreateLaunchScriptTask.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@
33
import java.io.File;
44
import java.io.IOException;
55
import java.nio.charset.StandardCharsets;
6+
import java.nio.file.Files;
7+
import java.nio.file.Path;
8+
import java.nio.file.attribute.PosixFileAttributeView;
9+
import java.nio.file.attribute.PosixFilePermission;
610
import java.util.ArrayList;
711
import java.util.Collections;
12+
import java.util.HashSet;
813
import java.util.List;
914
import java.util.stream.Collectors;
1015
import javax.inject.Inject;
@@ -190,10 +195,30 @@ private void writeLaunchScriptForUnix(List<String> javaCommand) throws IOExcepti
190195
"(cd " + escapeShellArg(getWorkingDirectory().get()) + "; exec "
191196
+ javaCommand.stream().map(this::escapeShellArg).collect(Collectors.joining(" ")) + ")");
192197

198+
Path destination = getLaunchScript().get().getAsFile().toPath();
193199
FileUtils.writeStringSafe(
194-
getLaunchScript().get().getAsFile().toPath(),
200+
destination,
195201
String.join("\n", lines),
196202
StandardCharsets.UTF_8);
203+
204+
makeExecutable(destination);
205+
}
206+
207+
private static void makeExecutable(Path destination) throws IOException {
208+
var permissionView = Files.getFileAttributeView(destination, PosixFileAttributeView.class);
209+
if (permissionView != null) {
210+
var perm = new HashSet<>(permissionView.readAttributes().permissions());
211+
if (perm.contains(PosixFilePermission.OWNER_READ)) {
212+
perm.add(PosixFilePermission.OWNER_EXECUTE);
213+
}
214+
if (perm.contains(PosixFilePermission.GROUP_READ)) {
215+
perm.add(PosixFilePermission.GROUP_EXECUTE);
216+
}
217+
if (perm.contains(PosixFilePermission.OTHERS_READ)) {
218+
perm.add(PosixFilePermission.OTHERS_EXECUTE);
219+
}
220+
permissionView.setPermissions(perm);
221+
}
197222
}
198223

199224
private String escapeShellArg(String text) {

0 commit comments

Comments
 (0)