Put all the logic in jgit.bzl, where a single edit suffices to get
the local flavor.
Given that all sha1 for jgit dependencies are in jgit.bzl, we can
remove the constants and use sha1 values directly.
Change-Id: Icabf651e02f226e5c025457d54588074a11ae283
Now that Bazel build for JGit is fully implemented, we can document
the process of routing the JGit dependency to the development tree
instead of consuming it from Central or ~/.m2 local repository:
1. Activate local jgit repository in WORKSPACE file:
local_repository(
name = "jgit",
path = "/home/<user>/projects/jgit",
)
2. Uncomment alias to jgit repository in lib/jgit/**/BUILD files.
It shouldn't be needed and is tracked under this issue upstream: [1]:
alias(
name = "jgit-alias",
actual = select({
"@//lib:jgit-dev": "@jgit//org.eclipse.jgit:jgit",
"//conditions:default": "@jgit_lib//jar",
}),
visibility = ["//visibility:public"],
)
Test plan:
Update local JGit tree, run tests and verify that local JGit tree
modifications are relfected in gerrit build:
$ bazel build --define jgit-dev=1 headless
To consume JGit from Central, do not pass jgit-dev=1:
$ bazel test ...
[1] https://github.com/bazelbuild/bazel/issues/2707
Change-Id: I1b0fee7df802f6cbd54acbb0bc73157e2b8bc7cf
This snapshot includes several fixes since the release, including some
improvements in LFS support:
d3148f300 Make ObjectDownloadListener public
55c629a9f LfsProtocolServlet#LfsRequest: Add operation type helper methods
56fe21778 Expose LFS operation strings as public constants
590141163 LfsProtocolServlet: Improve error on getLargeFileRepository failure
7245aa031 Add support for refusing LFS request due to invalid authorization
0e187f148 Add LfsPointerFilter TreeFilter
Change-Id: Ib3cd9d8677b6c6017becc5c46e7fa4dfc5192807
Change-Id: Ibd58603e6c1975c883dbf9f1d115e03a25467774
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: David Pursehouse <dpursehouse@collab.net>
Reformat the Bazel build files with the buildifier tool [1].
The style is different for Bazel files. Most notably, indentation level
is 4 spaces instead of 2, and " is used instead of '.
[1] https://github.com/bazelbuild/buildifier
Change-Id: I95c0c6f11b6d76572797853b4ebb5cee5ebd3c98
Adds support for MonotonicClock, which Gerrit can use
inside of ReviewDb and NoteDb to maintain timestamps.
Change-Id: Ic7c646b32644c1d1b1e93eeb50a3bf153e85d3c3
Includes {get,set}GitwebDescription on Repository,
which can replace methods in GitRepositoryManager.
Change-Id: Ie25a49864c770e1cfb065dfc9e7c1e8faa97b03c
This snapshot includes the following changes since the previous:
abeaafc Don't log error if system git config does not exist
c711361 Add missing dependency to slf4j-log4j bridge
a4508f9 Rename FSJava7Test to FSTest
5a4dcce Improve JavaDoc for LfsProtocolServlet.getLargeFileRepository
The plan is to release Gerrit 2.13 with JGit 4.5 so this upgrade is to
release 2.13-rc1 with a JGit version that is closer to what will be JGit
4.5.
Change-Id: I75cf16a19abc5401f75be64efe72aa6013bd53b9
This snapshot includes the following changes since the previous:
b67df51 CLI: implement option -d for deleting tags
34673f0 Added a clean command.
d52bf2e Add specific exception for LFS unavailable
ac85672 Add Javadoc for LFS exception messages
3100662 ReceivePack: integrate push option parsing into recvCommands
2fd4559 ReceivePack: simplify getPushOptions
8e00a31 ReceivePack: allow push options to be set
Change-Id: I266d9663e32bd854a55c14ef8f7c2b427bf2c842
This snapshot includes the following commits since the previous:
dd2a5a7 Make GC.RepoStatistics static
c2e2326 ReceivePack: refactor push option parsing
36cf4fe Fix push option initalization on HTTP
9ae7d49 DfsReader: check object type during open
1227165 Clarify the semantics of DfsRefDatabase#compareAndPut
649ad06 NoteMapTest: Add missing @Test annotations
2d4d644 Add a RepeatRule to help repeating flaky tests
3e27fb3 Do not fake a SymbolicRef as an ObjectIdRef
ffbe03a LfsProtocolServlet: Add support for insufficient storage error
9974f30 Packet logging for JGit
609de52 push: Do not use push options unless requested
20d3f83 Fix HttpClientConnection leaking temporary buffer files
edd8ad4 Use FS#lastModified instead of File#lastModified
da9eef8 Don't check lastModified, length on folders for submodules
b8260b5 Added Java 7 launch config with LANG env. variable set
c4e209b Add HTTP status code to ServiceMayNotContinueException
Change-Id: Ieb219e82899ec606f4ef90317883c09bb8a0133d
This snapshot includes the following commits since the previous:
1096652 LfsProtocolServlet: Add support for rate limit and bandwidth limit errors
de89b7d LfsProtocolServlet: Always include message in error response
0a86b03 LfsRepository{NotFound,ReadOnly}: Externalize message strings
2fc1ceb DownloadTest: Use enums from org.apache.http.HttpStatus
108bee1 Ignore IOException thrown from close
f15e9c0 DfsObjDatabase: clear PackList dirty bit if no new packs
13f0db2 Enhance ResetCommand to allow disabling reflog update
Change-Id: I6590a62f3e1d839a8d36a4b933771d195cbe7650
This snapshot inludes the following fixes since the previous:
- LfsProtocolServlet: Always set the Content-Type header on response
- LfsProtocolServlet: Don't set pretty printing on Gson
- BaseReceivePack: null and IllegalStateException cases for getPushOptions
Change-Id: I7115335bf342df11fd6376d887d13f8e7aa7d91f
This snapshot includes the following changes in LfsProtocolServlet
that are needed by the LFS plugin:
- Allow getLargeFileRepository to raise exceptions
- Allow access to objects in request
- Reuse existing Writer when sending error response
Change-Id: Ic1bba1d7387b1f5a9d6121e750208a9d2a1dae2f
This snapshot includes the following improvements related to LFS:
- Include error message in response body
- Pass request and path to getLargeFileRepository
- Return HTTP 422 instead of 400
and the following other changes that are needed in Gerrit:
- RefSpec: allow construction of weird wildcarded RefSpecs
- RefSpec: reject refs ending in '/'
- BatchRefUpdate: Include command message in toString()
- DiffFormatter: Support setting a reader without a repo
Change-Id: I42eb72603c47e05cf39079164653defa96cf37c4
To run the tests:
bazel test //...
To build the Gerrit plugin API, run:
bazel build gerrit-plugin-api:plugin-api_deploy.jar
To build the Gerrit extension API, run:
bazel build gerrit-extension-api:extension-api_deploy.jar
TODOs:
Licenses
Reduce visibility (all public for now)
Generate HTML Documentation
Core plugins
gerrit_plugin() rule to build plugins in tree and standalone modes
GWT UI (only gwt_module() skylark rule is provided, no gwt_binary())
PolyGerrit UI
WAR
Publish artifacts to Maven Central
Ask Bazel team to add Gerrit to their CI on ci.bazel.io
Contributed-By: Han-Wen Nienhuys <hanwen@google.com>
Change-Id: I9a86e670882a44a5c966579cdeb8ed79b1590de3
This is a recent snapshot built off JGit's master branch, including
the fixes that went into 4.1.2.201602141800-r which we have already
upgraded to on stable-2.12.
Change-Id: I9cb311906957f4cbc00e0d168abfe512c070dca1
I39f2d5d7 isolated jgit in its own cell, that is based on this JGit
Buck build implementation: [1]. Migration was done seamlessly, meant
that single BUCK file in lib/jgit represents JGit cell root location.
However, the real structure of JGit project is divided to number of
different sub-projects. To map between simplified JGit cell in gerrit
and real JGit project structure in JGit project, java_library() rules
were added to root BUCK file in JGit project that work like proxy to
real rules located in JGit sub-projects. For example //:jgit in JGit
tree was implemented as:
java_library(
name = 'jgit',
exported_deps = ['//org.eclipse.jgit:jgit'],
visibility = ['PUBLIC'],
)
Such proxies are needed for every artifact that is referenced from
gerrit build and make Buck build implementation unnecessary verbose.
Moreover this introduced some subtle issues, like using JGit
dependencies in context of java_doc rules, where $(location :foo) macro
is unable to resolve the underlying files because java_library with
exported dependencies only do not have association with output file.
An attempt to replace java_library with only exported dependenies with
prebuilt_jar: [2] that depends on the real artifact introduced another
problem with assembly of gerrit.war, because now jgit.jar is twice in
the classpath (because prebuilt_jar has output file association). To
fix this we would need to filter potential duplicates in the assembly
process of gerrit.war.
Instead of using proxy approach and to try to provide yet another
workaround to subtle problems, emulate the JGit project structure and
reference directly the same artifacts paths within gerrit JGit cell
in gerrit build:
deps = [
'@jgit//org.eclipse.jgit:jgit',
],
This simplifies JGit Buck build implementation, as we wouldn't need to
proxy all artifacts referenced from gerrit build from the root build
file. And this would fix all remaining issues.
This approach make gerrit build slightly more verbose. JGit upgrade
process would need to touch 4 files instead of only one. But given that
the Gerrit/JGit development integration is important feature, we would
like to support (as this integration attempt shows: [3]) in our build
toolchain, this overhead is justified.
With this change, the root build file in JGit project can be stripped:
[4].
[1] https://git.eclipse.org/r/61938
[2] https://git.eclipse.org/r/66547
[3] https://gerrit-review.googlesource.com/61892
[4] https://git.eclipse.org/r/66562
Change-Id: I2d278f80d0fedc4c5e9943804873f57145877dfe