Update Buck to newest version

The new Buck version fixed annoying stdout spamming bug on unit test
failures: [1]. Now we can revert our monkey patching hack to prevent
that.

Since [2] Buck interferes with files in buck-out directory: [3]. Switch
to using eclipse-out directory as Eclipse output directory instead. For
this change it's necessary to clean up buck-out directory, otherwise
`buck test` would fail.

This version also fixed "Python client lost connection" bug: [4].

This reverts commit 94e93aaad2.

[1] https://github.com/facebook/buck/issues/505
[2] 35cb495b57
[3] https://github.com/facebook/buck/issues/527
[4] https://github.com/facebook/buck/issues/534

Change-Id: I4cd1a99ce9d0615713c235d873e6cdd61b1854bb
This commit is contained in:
David Ostrovsky 2015-11-22 11:13:59 +01:00 committed by Dave Borowitz
parent 0924ebbc15
commit 58cb4b4881
7 changed files with 46 additions and 29 deletions

View File

@ -24,7 +24,7 @@
src_roots = java, resources
[project]
ignore = .git
ignore = .git, eclipse-out
[cache]
mode = dir

View File

@ -1 +1 @@
1b03b4313b91b634bd604fc3487a05f877e59dee
6659a474fb2ba6e921bb38c1b55d4c9ba6073cfa

1
.gitignore vendored
View File

@ -15,6 +15,7 @@
/.buckd
/buck-cache
/buck-out
/eclipse-out
/extras
/local.properties
*.pyc

View File

@ -32,6 +32,7 @@ import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.CodeSource;
@ -599,13 +600,27 @@ public final class GerritLauncher {
}
}
/**
* Locate the path of the {@code eclipse-out} directory in a source tree.
*
* @throws FileNotFoundException if the directory cannot be found.
*/
public static Path getDeveloperEclipseOut() throws FileNotFoundException {
return resolveInSourceRoot("eclipse-out");
}
/**
* Locate the path of the {@code buck-out} directory in a source tree.
*
* @throws FileNotFoundException if the directory cannot be found.
*/
public static Path getDeveloperBuckOut() throws FileNotFoundException {
// Find ourselves in the CLASSPATH, we should be a loose class file.
return resolveInSourceRoot("buck-out");
}
private static Path resolveInSourceRoot(String name)
throws FileNotFoundException {
// Find ourselves in the classpath, as a loose class file or jar.
Class<GerritLauncher> self = GerritLauncher.class;
URL u = self.getResource(self.getSimpleName() + ".class");
if (u == null) {
@ -622,30 +637,32 @@ public final class GerritLauncher {
}
}
if (!"file".equals(u.getProtocol())) {
throw new FileNotFoundException("Cannot find extract path from " + u);
throw new FileNotFoundException("Cannot extract path from " + u);
}
// Pop up to the top level classes folder that contains us.
// Pop up to the top-level source folder by looking for .buckconfig.
Path dir = Paths.get(u.getPath());
while (!name(dir).equals("buck-out")) {
while (!Files.isRegularFile(dir.resolve(".buckconfig"))) {
Path parent = dir.getParent();
if (parent == null || parent.equals(dir)) {
throw new FileNotFoundException("Cannot find buck-out from " + u);
if (parent == null) {
throw new FileNotFoundException("Cannot find source root from " + u);
}
dir = parent;
}
return dir;
}
private static String name(Path dir) {
return dir.getFileName().toString();
Path ret = dir.resolve(name);
if (!Files.exists(ret)) {
throw new FileNotFoundException(
name + " not found in source root " + dir);
}
return ret;
}
private static ClassLoader useDevClasspath()
throws MalformedURLException, FileNotFoundException {
Path out = getDeveloperBuckOut();
Path out = getDeveloperEclipseOut();
List<URL> dirs = new ArrayList<>();
dirs.add(out.resolve("eclipse").resolve("classes").toUri().toURL());
dirs.add(out.resolve("classes").toUri().toURL());
ClassLoader cl = GerritLauncher.class.getClassLoader();
for (URL u : ((URLClassLoader) cl).getURLs()) {
if (includeJar(u)) {

View File

@ -2,7 +2,12 @@ include_defs('//lib/js.defs')
WCT_TEST_PATTERNS = ['test/**']
PY_TEST_PATTERNS = ['polygerrit_wct_tests.py']
APP_SRCS = glob(['**'], excludes = WCT_TEST_PATTERNS + PY_TEST_PATTERNS)
APP_SRCS = glob(
['**'],
excludes = [
'BUCK',
'index.html',
] + WCT_TEST_PATTERNS + PY_TEST_PATTERNS)
WEBJS = 'bower_components/webcomponentsjs/webcomponents-lite.js'

View File

@ -27,7 +27,6 @@ from multiprocessing import cpu_count
# Set defaults on java rules:
# - Add AutoValue annotation processing support.
# - Treat source files as UTF-8.
# - std_out_log_level = info (the default is too spammy)
_buck_java_library = java_library
def java_library(*args, **kwargs):
@ -37,9 +36,9 @@ def java_library(*args, **kwargs):
_buck_java_test = java_test
def java_test(*args, **kwargs):
_munge_args(kwargs)
_do_not_spam_std_out(kwargs)
_buck_java_test(*args, **kwargs)
# Munge kwargs to set Gerrit-specific defaults.
def _munge_args(kwargs):
_set_auto_value(kwargs)
@ -57,11 +56,6 @@ def _set_extra_arguments(kwargs):
extra_args.extend(['-encoding', 'UTF-8'])
def _do_not_spam_std_out(kwargs):
level = 'std_out_log_level'
if level not in kwargs:
kwargs[level] = 'INFO'
def _set_auto_value(kwargs):
apk = 'annotation_processors'
if apk not in kwargs:

View File

@ -76,7 +76,7 @@ def gen_plugin_classpath(root):
if path.exists(path.join(root, 'src', 'test', 'java')):
testpath = """
<classpathentry kind="src" path="src/test/java"\
out="buck-out/eclipse/test"/>"""
out="eclipse-out/test"/>"""
else:
testpath = ""
print("""\
@ -85,7 +85,7 @@ def gen_plugin_classpath(root):
<classpathentry kind="src" path="src/main/java"/>%(testpath)s
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/gerrit"/>
<classpathentry kind="output" path="buck-out/eclipse/classes"/>
<classpathentry kind="output" path="eclipse-out/classes"/>
</classpath>""" % {"testpath": testpath}, file=fd)
def gen_classpath():
@ -141,12 +141,12 @@ def gen_classpath():
out = None
if s.startswith('lib/'):
out = 'buck-out/eclipse/lib'
out = 'eclipse-out/lib'
elif s.startswith('plugins/'):
if args.plugins:
plugins.add(s)
continue
out = 'buck-out/eclipse/' + s
out = 'eclipse-out/' + s
p = path.join(s, 'java')
if path.exists(p):
@ -158,7 +158,7 @@ def gen_classpath():
if out:
o = out + '/' + env
elif env == 'test':
o = 'buck-out/eclipse/test'
o = 'eclipse-out/test'
for srctype in ['java', 'resources']:
p = path.join(s, 'src', env, srctype)
@ -179,10 +179,10 @@ def gen_classpath():
for s in sorted(gwt_src):
p = path.join(ROOT, s, 'src', 'main', 'java')
if path.exists(p):
classpathentry('lib', p, out='buck-out/eclipse/gwtsrc')
classpathentry('lib', p, out='eclipse-out/gwtsrc')
classpathentry('con', JRE)
classpathentry('output', 'buck-out/eclipse/classes')
classpathentry('output', 'eclipse-out/classes')
p = path.join(ROOT, '.classpath')
with open(p, 'w') as fd: