Fix Benchmark processor when run from a root directory with different name than "enso" (#8382)

This PR fixes commands like `std-benchmarks/benchOnly Startup` for users that have `enso` clonned in multiple directories with different names.
This commit is contained in:
Pavel Marek 2023-11-24 18:58:58 +01:00 committed by GitHub
parent 8516ed5cbb
commit 5244003be8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 26 deletions

View File

@ -2,6 +2,7 @@ package org.enso.benchmarks;
import java.io.File; import java.io.File;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.nio.file.Files;
/** Utility methods used by the benchmark classes from the generated code */ /** Utility methods used by the benchmark classes from the generated code */
public class Utils { public class Utils {
@ -21,26 +22,30 @@ public class Utils {
} }
/** /**
* Returns the root directory of the Enso repository. * Locates the root of the Enso repository. Heuristic: we just keep going up the directory tree
* until we are in a directory containing ".git" subdirectory. Note that we cannot use the "enso"
* name, as users are free to name their cloned directories however they like.
* *
* @return Non-null file pointing to the root directory of the Enso repository. * @return Non-null file pointing to the root directory of the Enso repository.
*/ */
public static File findRepoRootDir() { public static File findRepoRootDir() {
File ensoDir; File rootDir = null;
try { try {
ensoDir = new File(Utils.class.getProtectionDomain().getCodeSource().getLocation().toURI()); rootDir = new File(Utils.class.getProtectionDomain().getCodeSource().getLocation().toURI());
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
throw new IllegalStateException("Unrecheable: ensoDir not found", e); throw new IllegalStateException("repository root directory not found: " + e.getMessage());
} }
for (; ensoDir != null; ensoDir = ensoDir.getParentFile()) { for (; rootDir != null; rootDir = rootDir.getParentFile()) {
if (ensoDir.getName().equals("enso")) { // Check if rootDir contains ".git" subdirectory
if (Files.exists(rootDir.toPath().resolve(".git"))) {
break; break;
} }
} }
if (ensoDir == null || !ensoDir.exists() || !ensoDir.isDirectory() || !ensoDir.canRead()) { if (rootDir == null || !rootDir.exists() || !rootDir.isDirectory() || !rootDir.canRead()) {
throw new IllegalStateException("Unrecheable: ensoDir does not exist or is not readable"); throw new IllegalStateException(
"Unreachable: repository root directory does not exist or is not readable");
} }
return ensoDir; return rootDir;
} }
public static BenchSpec findSpecByName(BenchGroup group, String specName) { public static BenchSpec findSpecByName(BenchGroup group, String specName) {

View File

@ -5,6 +5,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.nio.file.Files;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.logging.Level; import java.util.logging.Level;
@ -20,6 +21,7 @@ import javax.tools.Diagnostic.Kind;
import org.enso.benchmarks.BenchGroup; import org.enso.benchmarks.BenchGroup;
import org.enso.benchmarks.BenchSpec; import org.enso.benchmarks.BenchSpec;
import org.enso.benchmarks.ModuleBenchSuite; import org.enso.benchmarks.ModuleBenchSuite;
import org.enso.benchmarks.Utils;
import org.enso.polyglot.LanguageInfo; import org.enso.polyglot.LanguageInfo;
import org.enso.polyglot.MethodNames.TopScope; import org.enso.polyglot.MethodNames.TopScope;
import org.enso.polyglot.RuntimeOptions; import org.enso.polyglot.RuntimeOptions;
@ -71,28 +73,13 @@ public class BenchProcessor extends AbstractProcessor {
"import org.enso.benchmarks.Utils;"); "import org.enso.benchmarks.Utils;");
public BenchProcessor() { public BenchProcessor() {
File currentDir = null; ensoDir = Utils.findRepoRootDir();
try {
currentDir =
new File(
BenchProcessor.class.getProtectionDomain().getCodeSource().getLocation().toURI());
} catch (URISyntaxException e) {
failWithMessage("ensoDir not found: " + e.getMessage());
}
for (; currentDir != null; currentDir = currentDir.getParentFile()) {
if (currentDir.getName().equals("enso")) {
break;
}
}
if (currentDir == null) {
failWithMessage("Unreachable: Could not find Enso root directory");
}
ensoDir = currentDir;
// Note that ensoHomeOverride does not have to exist, only its parent directory // Note that ensoHomeOverride does not have to exist, only its parent directory
ensoHomeOverride = ensoDir.toPath().resolve("distribution").resolve("component").toFile(); ensoHomeOverride = ensoDir.toPath().resolve("distribution").resolve("component").toFile();
} }
@Override @Override
public SourceVersion getSupportedSourceVersion() { public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latest(); return SourceVersion.latest();