Skip to content

Commit 438ae1d

Browse files
committed
Ask for permission to delete files
1 parent e9e057c commit 438ae1d

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/ContributionTask.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,12 @@ private void addTests(Path originalTestsLocation){
318318
.resolve("java");
319319
Path allTests = originalTestsLocation.resolve(".");
320320

321+
ensureFileBelongsToProject(destination);
322+
boolean shouldDelete = InteractiveTaskUtils.askForDeletePermission(destination);
323+
if (!shouldDelete) {
324+
throw new RuntimeException("The task didn't get permission to delete dummy stubs. Cannot proceed with the task execution");
325+
}
326+
321327
InteractiveTaskUtils.printUserInfo("Removing dummy test stubs");
322328
invokeCommand("rm -r " + destination, "Cannot delete files from: " + destination);
323329

@@ -504,18 +510,24 @@ private void removeEmptyConfigFiles() throws IOException {
504510
if (Files.exists(agentExtractedPredefinedClasses)) {
505511
File[] extractedPredefinedClasses = new File(agentExtractedPredefinedClasses.toUri()).listFiles();
506512
if (extractedPredefinedClasses == null || extractedPredefinedClasses.length == 0) {
507-
InteractiveTaskUtils.printUserInfo("Removing empty: agent-extracted-predefined-classes");
508-
invokeCommand("rm -r " + agentExtractedPredefinedClasses, "Cannot delete empty config file: " + agentExtractedPredefinedClasses);
513+
boolean canDelete = InteractiveTaskUtils.askForDeletePermission(agentExtractedPredefinedClasses);
514+
if (canDelete) {
515+
InteractiveTaskUtils.printUserInfo("Removing empty: agent-extracted-predefined-classes");
516+
invokeCommand("rm -r " + agentExtractedPredefinedClasses, "Cannot delete empty config file: " + agentExtractedPredefinedClasses);
517+
}
509518
}
510519
}
511520

512521
trimIndexFile(indexFile, remainingFiles);
513522
}
514523

515524
private void removeConfigFile(Path path, CONFIG_FILES file, List<CONFIG_FILES> remainingFiles) {
516-
InteractiveTaskUtils.printUserInfo("Removing empty: " + file.get());
517-
invokeCommand("rm " + path, "Cannot delete empty config file: " + path);
518-
remainingFiles.remove(file);
525+
boolean canDelete = InteractiveTaskUtils.askForDeletePermission(path);
526+
if (canDelete) {
527+
InteractiveTaskUtils.printUserInfo("Removing empty: " + file.get());
528+
invokeCommand("rm " + path, "Cannot delete empty config file: " + path);
529+
remainingFiles.remove(file);
530+
}
519531
}
520532

521533
private void trimIndexFile(Path index, List<CONFIG_FILES> remainingFiles) throws IOException {
@@ -592,4 +604,10 @@ private void invokeCommand(String executable, List<String> args, String errorMes
592604
throw new RuntimeException(errorMessage + ". See: " + execOutput);
593605
}
594606
}
607+
608+
private void ensureFileBelongsToProject(Path file) {
609+
if (!file.startsWith(getProject().getProjectDir().getAbsolutePath())) {
610+
throw new RuntimeException("The following file doesn't belong to the metadata repository: " + file);
611+
}
612+
}
595613
}

tests/tck-build-logic/src/main/java/org/graalvm/internal/tck/utils/InteractiveTaskUtils.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.graalvm.internal.tck.utils;
22

3+
import java.nio.file.Path;
34
import java.util.Scanner;
45
import java.util.function.Function;
56

@@ -52,6 +53,15 @@ public static boolean askYesNoQuestion(String question, String helpMessage, bool
5253
}
5354
}
5455

56+
public static boolean askForDeletePermission(Path file) {
57+
String question = "Please double check that the task can remove the following file: " + file +
58+
". If this file is not generated by the task, please report the error on the metadata repository. " +
59+
"Can the task delete this file? [y/N]";
60+
String help = "The task should only remove dummy files generated in the previous step. Please verify that the following file can be removed: " + file;
61+
62+
return askYesNoQuestion(question, help, false);
63+
}
64+
5565
public static void closeSection() {
5666
ColoredOutput.println("------------------------------------------------------------------------------------------", ColoredOutput.OUTPUT_COLOR.BLUE);
5767
}

0 commit comments

Comments
 (0)