29 Commits

Author SHA1 Message Date
Han-Wen Nienhuys
fe81f93215 Simplify local JGit development
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
2017-03-24 08:36:18 +09:00
David Ostrovsky
e51b745efa Bazel: Allow to consume jgit from development tree
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
2017-03-22 22:27:12 +01:00
David Ostrovsky
fdbfcad77d Remove Buck based build
Bug: Issue 5302
Change-Id: I6e860446ef30ff0ad1c7c49fc0e39d39d921820b
2017-01-23 12:44:58 +00:00
David Pursehouse
074cf23832 Upgrade JGit to 4.6.0.201612231935-r.30-gd3148f300
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
2017-01-19 23:45:46 +00:00
Matthias Sohn
e1d12494d9 Update JGit to 4.6.0.201612231935-r
Change-Id: Ibd58603e6c1975c883dbf9f1d115e03a25467774
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: David Pursehouse <dpursehouse@collab.net>
2016-12-29 21:21:37 +00:00
David Ostrovsky
fa18907d7f Bazel: Reformat build files
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
2016-12-07 11:33:07 +00:00
David Pursehouse
1a03ecf787 Upgrade JavaEWAH to 1.1.6 to match version used in JGit
JavaEWAH was upgraded in JGit in [1], which is included in the snapshot
build of JGit being used in Gerrit since change Ic7c646b32.

Upgrade to use the same version.

[1] https://git.eclipse.org/r/#/c/77604/

Change-Id: I5de4cdbdf816296d97640bb83130544ec85685af
2016-12-05 22:28:15 +09:00
Shawn Pearce
b3fdbcf78d Update JGit to 4.5.0.201609210915-r.115-g81f9c1843
Adds support for MonotonicClock, which Gerrit can use
inside of ReviewDb and NoteDb to maintain timestamps.

Change-Id: Ic7c646b32644c1d1b1e93eeb50a3bf153e85d3c3
2016-11-21 14:10:02 -08:00
David Ostrovsky
899edce177 Bazel: Unsign the JGit jars
Now that we use download_file.py anyway, move the unsign part to it.

Change-Id: I139fae87bbe263ac42e75d4706fa28059a53e326
2016-11-15 15:12:11 +00:00
Shawn Pearce
933306d823 Update JGit to 4.5.0.201609210915-r.104-g1c70dd6d2
Includes {get,set}GitwebDescription on Repository,
which can replace methods in GitRepositoryManager.

Change-Id: Ie25a49864c770e1cfb065dfc9e7c1e8faa97b03c
2016-11-14 12:33:32 -08:00
David Ostrovsky
0fc4f7a900 Rename ewah dependency to javaewah
This is a preparation change to support building JGit from development
tree.

Change-Id: I581a1632aad93eaf820fc2c608ea37d29286f392
2016-11-06 18:29:06 +01:00
David Ostrovsky
27fbb2b835 Bazel: Externalize JGIT_VERS constant
This is needed for defining external documentation link for javadoc
rule.

Change-Id: I562de840327c6b27941f7238023a47eb8d0b2394
2016-10-25 12:27:13 +00:00
Yuxuan 'fishy' Wang
75b98f77d9 bazel: add license to appropriate lib/ targets
This is to prepare for implementing genlicenses rule in bazel.

Change-Id: I60d79d5b53f9dd05c9f9ebfe6e6f658604c5a037
2016-09-26 16:42:38 +08:00
Han-Wen Nienhuys
2604257c29 Bazel: add support for unsigning jar files
One test is still failing:

  HttpPushForReviewIT#pushForMasterWithTopicOption()

Change-Id: I257f443557a998f0c2190bd07f01547368aeb1e1
2016-09-23 15:26:03 +02:00
David Pursehouse
95848260a1 Upgrade JGit to version 4.5.0.201609210915-r
Change-Id: I913be3f8543e255db8a5db9c861ac0ff4e308cba
2016-09-21 16:24:37 +02:00
Hugo Arès
f6fd4558fc Upgrade JGit to 4.4.1.201607150455-r.148-gabeaafc
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
2016-09-12 10:36:11 -04:00
David Pursehouse
527fc388dd Upgrade JGit to 4.4.1.201607150455-r.144-gb67df51
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
2016-08-31 11:49:24 +09:00
David Ostrovsky
8ffeb7f208 Fix SHA1 for JGit 4.4.1.201607150455-r.137-gdd2a5a7 update
Change-Id: I97ac8b312ad078ba83e5dd2193327f2d2b7dcd30
2016-08-30 16:55:34 +09:00
Jonathan Nieder
379e888628 Update JGit to 4.4.1.201607150455-r.137-gdd2a5a7
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
2016-08-27 01:23:22 +00:00
David Pursehouse
66da12cc66 Upgrade JGit to 4.4.1.201607150455-r.118-g1096652
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
2016-08-21 14:05:15 +09:00
David Pursehouse
548a04e0c1 Upgrade JGit to 4.4.1.201607150455-r.109-g0b4751e
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
2016-08-17 10:34:19 +09:00
David Pursehouse
944917c23f Upgrade JGit to 4.4.1.201607150455-r.105-g81ba2be
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
2016-08-10 11:52:29 +09:00
David Pursehouse
cfb51c2cac Upgrade JGit to 4.4.1.201607150455-r.74-gd6fe52e
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
2016-08-04 05:14:39 +00:00
David Pursehouse
c7df2fe330 Upgrade JGit to version v4.4.1.201607150455-r
Change-Id: Ic0f0741f9bed06815c2681943b461ce1a71c363b
2016-07-20 17:31:01 +09:00
David Ostrovsky
b81b4f75ae Implement Bazel build
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
2016-06-14 21:12:02 +02:00
Dave Borowitz
2ae2dcec53 Update JGit to 4.3.0.201604071810-r.23-gc9b0028
Change-Id: I9df04e3ddf840481a3796fccb4f4d845e538b0a8
2016-05-03 19:56:26 -04:00
Matthias Sohn
fc54a60dd6 Upgrade JGit to 4.3.0.201604071810-r
this version brings the following fixes

- Fix jgit gc which retained garbage packs for 2 weeks which resulted
in repo size explosion [1] by introducing a new option for pack expiration
which by default expires packs after 1 hour

- Fix refcounting and reclaiming memory in RepositoryCache. Hugo
validated that this reduces memory consumption in Gerrit considerably

- Make the FileLfsRepository thread safe. This fixes a severe threading
issue for the lfs-storage-fs plugin [2]

[1] https://groups.google.com/forum/#!searchin/repo-discuss/gc/repo-discuss/JW06GsH0vLo/9GV4TL0VDgAJ
[2] https://git.eclipse.org/r/#/c/52177/16/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/FileLfsServlet.java

Change-Id: If6ba90c5e79747d20338ad32f03624a6bd75ee43
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2016-04-08 16:17:14 +02:00
David Pursehouse
eb4f5d46ff Upgrade JGit to 4.2.0.201601211800-r.136-g8efdaaf
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
2016-02-29 17:47:28 +09:00
David Ostrovsky
64d4bdf946 Buck: Emulate real JGit project structure in its own cell
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
2016-02-14 11:46:49 +01:00