Implement Bazel build
TEST PLAN:
$ bazel test gitiles-servlet/...
Run debug version:
$ sh {path/to/src}/tools/run_bazel_dev.sh
TODO:
* publishing maven artifacts.
* check out Bazel's generate_workspace.
* intellij/eclipse project generation
Change-Id: I288011ce622536ce72c59a1961f962db9fe9e761
diff --git a/gitiles-servlet/BUILD b/gitiles-servlet/BUILD
new file mode 100644
index 0000000..ff33933
--- /dev/null
+++ b/gitiles-servlet/BUILD
@@ -0,0 +1,84 @@
+java_library(
+ name = "servlet-api",
+ neverlink = 1,
+ exports = ["//lib:servlet-api_2_5"],
+)
+
+java_library(
+ name = "servlet",
+ srcs = glob(["src/main/java/**/*.java"]),
+ resources = glob(["src/main/resources/**/*"]),
+ visibility = ["//visibility:public"],
+ deps = [
+ ":servlet-api",
+ "//blame-cache:lib",
+ "//lib:autolink",
+ "//lib:cm-autolink",
+ "//lib:commonmark",
+ "//lib:commons-lang",
+ "//lib:gfm-strikethrough",
+ "//lib:gfm-tables",
+ "//lib:gson",
+ "//lib:guava",
+ "//lib:joda-time",
+ "//lib:jsr305",
+ "//lib:prettify",
+ "//lib/guice",
+ "//lib/jgit",
+ "//lib/jgit:jgit-archive",
+ "//lib/jgit:jgit-servlet",
+ "//lib/slf4j:slf4j-api",
+ "//lib/soy",
+ ],
+)
+
+java_library(
+ name = "testutil",
+ srcs = glob(
+ ["src/test/java/**/*.java"],
+ exclude = ["src/test/java/**/*Test.java"],
+ ) + glob(["**/ServletTest.java"]),
+ deps = [
+ ":servlet",
+ "//lib:gson",
+ "//lib:guava",
+ "//lib:servlet-api_2_5",
+ "//lib:truth",
+ "//lib/jgit",
+ "//lib/jgit:jgit-servlet",
+ "//lib/jgit:junit",
+ "//lib/junit",
+ ],
+)
+
+load("//gitiles-servlet:junit.bzl", "junit_tests")
+
+junit_tests(
+ name = "ServletTests",
+ srcs = glob(
+ [
+ "src/test/java/**/*Test.java",
+ ],
+ exclude = ["**/ServletTest.java"],
+ ),
+ runtime_deps = ["//lib/junit:hamcrest-core"],
+ deps = [
+ ":servlet",
+ ":testutil",
+ "//lib:autolink",
+ "//lib:cm-autolink",
+ "//lib:commonmark",
+ "//lib:gfm-strikethrough",
+ "//lib:gfm-tables",
+ "//lib:gson",
+ "//lib:guava",
+ "//lib:joda-time",
+ "//lib:servlet-api_2_5",
+ "//lib:truth",
+ "//lib/jgit",
+ "//lib/jgit:jgit-servlet",
+ "//lib/jgit:junit",
+ "//lib/junit",
+ "//lib/soy",
+ ],
+)
diff --git a/gitiles-servlet/junit.bzl b/gitiles-servlet/junit.bzl
new file mode 100644
index 0000000..ee79637
--- /dev/null
+++ b/gitiles-servlet/junit.bzl
@@ -0,0 +1,60 @@
+# skylark rule to generate a Junit4 TestSuite
+# Assumes srcs are all .java Test files
+# Assumes junit4 is already added to deps by the user.
+
+# See https://github.com/bazelbuild/bazel/issues/1017 for background.
+
+_OUTPUT = """import org.junit.runners.Suite;
+import org.junit.runner.RunWith;
+
+@RunWith(Suite.class)
[email protected]({%s})
+public class %s {}
+"""
+
+_PREFIXES = ("org", "com", "edu")
+
+def _SafeIndex(l, val):
+ for i, v in enumerate(l):
+ if val == v:
+ return i
+ return -1
+
+def _AsClassName(fname):
+ fname = [x.path for x in fname.files][0]
+ toks = fname[:-5].split("/")
+ findex = -1
+ for s in _PREFIXES:
+ findex = _SafeIndex(toks, s)
+ if findex != -1:
+ break
+ if findex == -1:
+ fail("%s does not contain any of %s",
+ fname, _PREFIXES)
+ return ".".join(toks[findex:]) + ".class"
+
+def _impl(ctx):
+ classes = ",".join(
+ [_AsClassName(x) for x in ctx.attr.srcs])
+ ctx.file_action(output=ctx.outputs.out, content=_OUTPUT % (
+ classes, ctx.attr.outname))
+
+_GenSuite = rule(
+ attrs = {
+ "srcs": attr.label_list(allow_files = True),
+ "outname": attr.string(),
+ },
+ outputs = {"out": "%{name}.java"},
+ implementation = _impl,
+)
+
+def junit_tests(name, srcs, **kwargs):
+ s_name = name + "TestSuite"
+ j_name = s_name + ".java",
+ _GenSuite(name=s_name,
+ srcs=srcs,
+ outname=s_name)
+ native.java_test(name=name,
+ test_class=s_name,
+ srcs = srcs + [":"+s_name],
+ **kwargs)