Update Bucklets to get new Eclipse version Because Eclipse outputs moved to eclipse-out, DevServer may be loaded from either buck-out or eclipse-out. Tweak the heuristic for finding the source root: look for a directory containing .buckconfig. Change-Id: Ibf04ced29d48c70ffa76fd6d6fb4bf5900c785db
diff --git a/.gitignore b/.gitignore index cd7c29f..8b1fe53 100644 --- a/.gitignore +++ b/.gitignore
@@ -2,5 +2,6 @@ /.project /.settings /buck-out +/eclipse-out /gitiles.config /.buckd
diff --git a/bucklets b/bucklets index 661e6c8..dd43fb6 160000 --- a/bucklets +++ b/bucklets
@@ -1 +1 @@ -Subproject commit 661e6c8a61ea0e817382b71762a22706788d6c9d +Subproject commit dd43fb659389754ed86baadf3a47c7cd2ff76e83
diff --git a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java b/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java index ed9d203..4cc1e22 100644 --- a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java +++ b/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
@@ -51,12 +51,15 @@ import org.slf4j.LoggerFactory; import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; import java.net.InetAddress; import java.net.URI; import java.net.URISyntaxException; import java.net.UnknownHostException; +import java.nio.file.Files; +import java.nio.file.NoSuchFileException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; import java.util.Map; @@ -86,17 +89,17 @@ return cfg; } - private static FileNotFoundException badSourceRoot(URI u) { - return new FileNotFoundException("Cannot find source root from " + u); + private static NoSuchFileException badSourceRoot(URI u) { + return new NoSuchFileException("Cannot find source root from " + u); } - private static FileNotFoundException badSourceRoot(URI u, Throwable cause) { - FileNotFoundException notFound = badSourceRoot(u); + private static NoSuchFileException badSourceRoot(URI u, Throwable cause) { + NoSuchFileException notFound = badSourceRoot(u); notFound.initCause(cause); return notFound; } - private static File findSourceRoot() throws IOException { + private static Path findSourceRoot() throws IOException { URI u; try { u = DevServer.class.getResource(DevServer.class.getSimpleName() + ".class").toURI(); @@ -104,7 +107,7 @@ u = null; } if (u == null) { - throw new FileNotFoundException("Cannot find Gitiles source directory"); + throw new NoSuchFileException("Cannot find Gitiles source directory"); } if ("jar".equals(u.getScheme())) { String path = u.getSchemeSpecificPart(); @@ -122,29 +125,20 @@ } } - private static File findSourceRoot(URI targetUri) throws IOException { + private static Path findSourceRoot(URI targetUri) throws IOException { if (!"file".equals(targetUri.getScheme())) { throw badSourceRoot(targetUri); } - String targetPath = targetUri.getPath(); - // targetPath is an arbitrary path under buck-out/ in our Buck package - // layout. - int targetIndex = targetPath.lastIndexOf("buck-out/"); - if (targetIndex < 0) { - throw badSourceRoot(targetUri); + + Path dir = Paths.get(targetUri.getPath()); + while (!Files.isRegularFile(dir.resolve(".buckconfig"))) { + Path parent = dir.getParent(); + if (parent == null) { + throw badSourceRoot(targetUri); + } + dir = parent; } - String path = targetPath.substring(0, targetIndex); - URI u; - try { - u = new URI("file", path, null).normalize(); - } catch (URISyntaxException e) { - throw new IOException(e); - } - File root = new File(u); - if (!root.exists() || !root.isDirectory()) { - throw badSourceRoot(targetUri); - } - return root; + return dir; } private final File sourceRoot; @@ -152,7 +146,7 @@ private final Server httpd; DevServer(File cfgFile) throws IOException, ConfigInvalidException { - sourceRoot = findSourceRoot(); + sourceRoot = findSourceRoot().toFile(); Config cfg = defaultConfig(); if (cfgFile.exists() && cfgFile.isFile()) {