Files
gerrit/java/com/google/gerrit/server/BUILD
Patrick Hiesel f97d018b46 Factor out implicit ref cache from ReceiveCommits and provide NoCache
ReceiveCommits used to cache the refs that got advertised during 'git
push' in multiple maps directly in the class. This was essentially a
cache, though it was not declared as such. The cache offered fast
lookups for refs-by-change-id and refs-by-object-id (inverse).

This commit cleans up this code by factoring out the caching logic into
a separate class with an interface definition that is reasonably close
to JGit's RefDatabase. Surrounding code was refactored where required.

The intention of this commit is:
1) Clean up existing code
2) Make it easier to re-use the cached refs in other parts of
   ReceiveCommits
3) Allow implementations of RefDatabase that offer fast name-to-ref and
   object-id-to-ref lookups (such as RefTable) to turn off the cache
   using a config. This will be added in a future commit.

Change-Id: I0e5fc9a195df65c13dc2637e157d20c6c8f3afba
2019-10-22 16:54:57 +02:00

162 lines
5.3 KiB
Python

load("@rules_java//java:defs.bzl", "java_library")
load("//tools/bzl:javadoc.bzl", "java_doc")
CONSTANTS_SRC = [
"documentation/Constants.java",
]
GERRIT_GLOBAL_MODULE_SRC = [
"config/GerritGlobalModule.java",
]
TESTING_SRC = [
"account/externalids/testing/ExternalIdInserter.java",
"account/externalids/testing/ExternalIdTestUtil.java",
]
java_library(
name = "constants",
srcs = CONSTANTS_SRC,
visibility = ["//visibility:public"],
)
# Giant kitchen-sink target.
#
# The only reason this hasn't been split up further is because we have too many
# tangled dependencies (and Guice unfortunately makes it quite easy to get into
# this state). Which means if you see an opportunity to split something off, you
# should seize it.
java_library(
name = "server",
srcs = glob(
["**/*.java"],
exclude = CONSTANTS_SRC + GERRIT_GLOBAL_MODULE_SRC + TESTING_SRC,
),
resource_strip_prefix = "resources",
resources = ["//resources/com/google/gerrit/server"],
visibility = ["//visibility:public"],
deps = [
":constants",
"//java/com/google/gerrit/common:annotations",
"//java/com/google/gerrit/common:server",
"//java/com/google/gerrit/entities",
"//java/com/google/gerrit/exceptions",
"//java/com/google/gerrit/extensions:api",
"//java/com/google/gerrit/git",
"//java/com/google/gerrit/index",
"//java/com/google/gerrit/index:query_exception",
"//java/com/google/gerrit/index/project",
"//java/com/google/gerrit/jgit",
"//java/com/google/gerrit/json",
"//java/com/google/gerrit/lifecycle",
"//java/com/google/gerrit/mail",
"//java/com/google/gerrit/metrics",
"//java/com/google/gerrit/prettify:server",
"//java/com/google/gerrit/proto",
"//java/com/google/gerrit/server/cache/serialize",
"//java/com/google/gerrit/server/git/receive:ref_cache",
"//java/com/google/gerrit/server/ioutil",
"//java/com/google/gerrit/server/logging",
"//java/com/google/gerrit/server/util/git",
"//java/com/google/gerrit/server/util/time",
"//java/com/google/gerrit/util/cli",
"//java/com/google/gerrit/util/ssl",
"//java/org/apache/commons/net",
"//lib:args4j",
"//lib:autolink",
"//lib:automaton",
"//lib:blame-cache",
"//lib:flexmark",
"//lib:flexmark-ext-abbreviation",
"//lib:flexmark-ext-anchorlink",
"//lib:flexmark-ext-autolink",
"//lib:flexmark-ext-definition",
"//lib:flexmark-ext-emoji",
"//lib:flexmark-ext-escaped-character",
"//lib:flexmark-ext-footnotes",
"//lib:flexmark-ext-gfm-issues",
"//lib:flexmark-ext-gfm-strikethrough",
"//lib:flexmark-ext-gfm-tables",
"//lib:flexmark-ext-gfm-tasklist",
"//lib:flexmark-ext-gfm-users",
"//lib:flexmark-ext-ins",
"//lib:flexmark-ext-jekyll-front-matter",
"//lib:flexmark-ext-superscript",
"//lib:flexmark-ext-tables",
"//lib:flexmark-ext-toc",
"//lib:flexmark-ext-typographic",
"//lib:flexmark-ext-wikilink",
"//lib:flexmark-ext-yaml-front-matter",
"//lib:flexmark-formatter",
"//lib:flexmark-html-parser",
"//lib:flexmark-profile-pegdown",
"//lib:flexmark-util",
"//lib:gson",
"//lib:guava",
"//lib:guava-retrying",
"//lib:jgit",
"//lib:jgit-archive",
"//lib:jsch",
"//lib:juniversalchardet",
"//lib:mime-util",
"//lib:protobuf",
"//lib:servlet-api",
"//lib:soy",
"//lib:tukaani-xz",
"//lib/auto:auto-value",
"//lib/auto:auto-value-annotations",
"//lib/bouncycastle:bcpkix-neverlink",
"//lib/bouncycastle:bcprov-neverlink",
"//lib/commons:codec",
"//lib/commons:compress",
"//lib/commons:dbcp",
"//lib/commons:lang",
"//lib/commons:net",
"//lib/commons:validator",
"//lib/flogger:api",
"//lib/guice",
"//lib/guice:guice-assistedinject",
"//lib/guice:guice-servlet",
"//lib/jsoup",
"//lib/log:jsonevent-layout",
"//lib/log:log4j",
"//lib/lucene:lucene-analyzers-common",
"//lib/lucene:lucene-core-and-backward-codecs",
"//lib/lucene:lucene-queryparser",
"//lib/mime4j:core",
"//lib/mime4j:dom",
"//lib/ow2:ow2-asm",
"//lib/ow2:ow2-asm-tree",
"//lib/ow2:ow2-asm-util",
"//lib/prolog:runtime",
"//proto:cache_java_proto",
],
)
# Large modules that import things from all across the server package
# hierarchy, so they need lots of dependencies.
java_library(
name = "module",
srcs = GERRIT_GLOBAL_MODULE_SRC,
visibility = ["//visibility:public"],
deps = [
":server",
"//java/com/google/gerrit/extensions:api",
"//java/com/google/gerrit/server/git/receive",
"//java/com/google/gerrit/server/logging",
"//java/com/google/gerrit/server/restapi",
"//lib:blame-cache",
"//lib:guava",
"//lib:jgit",
"//lib:soy",
"//lib/guice",
],
)
java_doc(
name = "doc",
libs = [":server"],
pkgs = ["com.google.gerrit"],
title = "Gerrit Review Server Documentation",
)