Having a standard tool for formatting saves reviewers' valuable time.
google-java-format is Google's standard formatter and is somewhat
inspired by gofmt[1]. This commit formats everything using
google-java-format version 1.2.
The downside of this one-off formatting is breaking blame. This can be
somewhat hacked around with a tool like git-hyper-blame[2], but it's
definitely not optimal until/unless this kind of feature makes its way
to git core.
Not in this change:
* Tool support, e.g. Eclipse. The command must be run manually [3].
* Documentation of best practice, e.g. new 100-column default.
[1] https://talks.golang.org/2015/gofmt-en.slide#3
[2] https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/git-hyper-blame.html
[3] git ls-files | grep java$ | xargs google-java-format -i
Change-Id: Id5f3c6de95ce0b68b41f0a478b5c99a93675aaa3
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
gwt_binary() uses Bazel feature to retrieve the sources from the
dependency libraries. For the standalone API this feature cannot be
used as the only dependency is GWT UI plugin API. Expose the sources
in GWT UI plugin API as well.
TEST PLAN:
Apply this change and create the plugin API:
$ ./tools/maven/api.sh install
Apply reviewers plugin Bazel build implementation change: [1] and
verify, that the reviewers plugin can be built with the GWT UI plugin
API created with this change.
[1] https://gerrit-review.googlesource.com/91830
Change-Id: I2b065a8eccbc33020d461834704d684871f463d7
Implement genasciidoc rule for bazel. It's a filegroup containing all
the html and resource files.
Also implement genasciidoc_zip rule for bazel, which is similar to
buck's genasciidoc rule to produce a zip file containing all asciidoctor
generated and resource files.
TEST PLAN:
bazel build Documentation
buck build Documentation:html
diff -u bazel-bin/Documentation/install.html buck-out/gen/Documentation/html__tmp/Documentation/install.html
Change-Id: I3065355800a982c6956d3bb634204baaa60c045e
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
The functionality of skipping deleted or uncommented files when
navigating using the prev / next links will be implemented in a
following change. Note that the diff preferences dialog box currently
doesn't render these settings.
Change-Id: If7549cdd986a5e5dd26b1cbc4b4cfdb7ca48f880
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
Consume JGit as first third party library from its own cell. Normally
the cell is defined as lib/jgit directory. It can be easily replaced
with CLI:
buck build --config repositories.jgit=path/to/dev/jgit gerrit
or tweaking the .buckconfig:
[repositories]
jgit = path/to/dev/jgit
The former approach is sufficient to build and run the test from the
CLI, the latter is needed to generate eclipse project.
To isolate the JGit rules in its own cell some refactoring was needed.
JGit patch for GWT module was moved to gerrit-patch-jgit project, and
some symlinks were needed for maven machinery to work. include_defs()
doesn't work for now across cell boundaries, and native `buck fetch`
feature still has some limitations: [1]. Moreover, excluding paths,
unsigning JARs and license linking should be re-implemented on top
of it.
[1] https://github.com/facebook/buck/issues/602
Test Plan:
Normal gerrit build and the build with hijacked JGit cell should work
in both standalone (gerrit.war) and Eclipse environment. Note, that
to test --config repositories.jgit=path/to/dev/jgit use case, the most
recent JGit tree must be used, that contains Buck driven build
implementation.
Change-Id: I39f2d5d75bbac88804406d6242b5e714f4916926
Replace the usage of AccountDiffPreference with a different class in
extension API package.
Data is saved optimized in Git backend: default values are discarded
during save operation and restored during read operation; so that
this optimization step is transparent for the callers.
For example when only one setting, theme in this case, differs from
the default value, only this value is written into diff section in
preferences.config file:
+[diff]
+ theme = eclipse
To support live migration, the upgrade is done in two steps:
* part1 (this change):
o Always write to both git and db
o Introduce new configuration option to indicate whether to read from
git or db, initially set to read from db
o First binary update: some servers are reading/writing just the db;
some servers are additionally writing to git
o After first update: all servers are reading from the db, writing to
both
o Batch copy data from db to git (only related to non open source
Gerrit version)
o Update all servers to read from git. During the update, some will
still be reading from the db; that's ok, because everybody is
writing to git
* part2 (next change):
o Bump database version, migrate the data from db to git, delete the
table (and the flag) from the code and update the servers.
Change-Id: I30a6d82f4a8d0c33ae9bb26d7f93c66bd0cb8bee
Instead of the change ID pass the ChangeInfo object to extension
panels of the change screen. This makes all change data available to
the plugin UI code and the plugin doesn't need to load the change data
once more if it is needed.
To make this work the ChangeInfo class must be in a package that is
both visible to the Gerrit client and the plugins. This is why
ChangeInfo and all *Info classes that are imported into ChangeInfo are
moved to gerrit-gwtui-common.
ChangeInfo also uses classes from:
- //lib:gwtjsonrpc
- //lib:gwtorm_client
- //gerrit-common:client
- //gerrit-reviewdb:client
This is why these dependencies are added to gerrit-gwtui-common. They
are exported by gerrit-plugin-gwtui so that they are available to GWT
plugins.
Change-Id: I52d6c5cd68e3c05c66a6d68c2cef10a1df54948f
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
Pack prettify.{js,css} files from gerrit-prettify into the documentation
package as prettify.min.{js,css}.
Bug: Issue 3440
Change-Id: I86585477fc43781768d4883c97c5c275b5bb8760
//Documentation:js_licenses.txt is an optional target to build
the closure of licenses that are compiled into the JavaScript
by the GWT compiler. This is a subset of what is inside of
licenses.txt, but this subset may be necessary in some cases.
Explicitly break some edges that would otherwise by found
in the build graph to avoid dragging in license information
that is not necessary in the partial report created by the
js_licenses.txt target.
Change-Id: Ibbebb3365faf8dccbcd02ad7ef82280255fc5245
This should only appear in the server deps.
For UI code build //lib/jgit:edit_lib which
has only the tiny slice of code used in the UI.
Change-Id: Ia46c0559a7180f80fda30efb8884ca236997c92d
IE6 is no longer supported in target builds by GWT.
Remove the dead code, rename still live IE support to IE8.
Change-Id: I8d0f20ee09a687f2692e196d9f25cef928dc3bb4
- Change ordering of 'static', 'final', etc modifiers according to
the order suggested by JLS.
- Add comments in empty catch blocks for intentionally ignored
exceptions.
- Add curly braces around if-else blocks.
- Move `catch` to same line as closing brace of preceding `try`
blocks.
- Wrap long lines.
Note that this change does not fix all instances of the above errors
across the entire code base.
Change-Id: I24bb9649cc5013c249fa5d84e05322a5cdf2ace6
- Warn on empty statements, e.g. "for (;;);". These may be
typos and are easily replaced by "for (;;) {}" which is more
explicit.
- Warn on field hiding. This allows cleanup of many acceptance test
members, at the cost of a couple of renames and the occasional
suppression (when the field is in a public nested enum that shadows
a public constant).
- Warn on unnecessary casts.
- Warn on unused declared thrown exceptions. In addition to reducing
method signature length and number of imports, this also eliminated
some impossible catch blocks.
- Warn on missing @Override annotations.
- Warn on unused parameters. This is likely the most controversial,
as a few relatively common patterns require unused parameters in a
way that Eclipse can't ignore. However, it also resulted in cleanup
of a lot of unnecessary injections and method parameters, so I
think the cost was worth it.
Change-Id: I7224be8b1c798613a127c88507e8cce400679e5d
gwt_xml is more pythonic naming convention. Beside that recent Buck
version introduced new gwt_jar parameter in prebuilt_jar() rule and
future Buck versions may introduce gwt_xml parameter to java_library()
rule.
Change-Id: Ia6447e62945ce3eb5ff951421ebf2f0fdf622b3d
After migration to Buck's own gwt_binary() rule, gwt module libraries
must contain compiled classes. That makes the differentiation between
deps and compile_deps unnecessary.
Change-Id: I26fd741d566709a4d56b6e9623766012279903e4
Commit 6eabad25087fa6f1595353078ed933cc43ad7ec8 fixed a possible NPE
in PrettyFormatter but afterwards FindBugs started to report a
potential NPE on a follow-up line.
Change-Id: I18d112e70c6a84f436003932054e6adaa517dae1
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
* stable-2.8:
Support committing Lucene writes within a fixed interval
Fix ArrayIndexOutOfBoundsException on intraline diff again
Conflicts:
gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java
Change-Id: I7b93d81d8e5c53615ef1684b653d6fa9e941d935
When using intraline diffs with show line endings, a user could
encounter an ArrayIndexOutOfBoundsException when going from a file
with just newlines to carriage returns and newlines. This only
impacts the legacy change screen, however. Since the newline
may be in a span element itself, it looks like we have some more
things to check.
Change-Id: I65443f487be60a949346398a487de38eb88e75dd
GWT only needs the rebind code for CSS and ServerLinker to be
precompiled as bytecode. Save build time by passing no source
files to the java_library() used by gwt_module().
For a full draft build of ui_safari this cuts the refresh time
down from 32.015s to 26.158s on my MacBook. Saving 6s on each
UI reload adds up during development.
The common annotations need to be provided as bytecode, avoiding
spurious warnings from GWT when there is a Java syntax error.
Change-Id: I37826498650c65c05303e7d4d1177d05781c56f6
Updated version of prettify: in addition to adding new syntax
highlighters, it appears to run much better in IE versions >8.
This would manifest as an unhandled JavaScript exception.
Additionally, formatting appeared to not work well in IE standards
mode and Safari because the @media selector was getting mangled
by GWT. This was fixed in an update to GWT 2.5.1.
Change-Id: Idcc095dac1007c6794e9f67fa12a92b01695d5cf
* stable-2.7:
Fix: NullPointerException of dashboard title
Properly handle double click on external group in GroupTable
Add plugin repositories section in the pom
PrettyFormatter: Fix expand tab when syntax coloring is on.
* stable-2.6:
Fix: NullPointerException of dashboard title
Properly handle double click on external group in GroupTable
Add plugin repositories section in the pom
PrettyFormatter: Fix expand tab when syntax coloring is on.
* stable-2.7:
PrettyFormatter: Fix ArrayIndexOutOfBoundException with CRLF files.
Allow administrators to see all groups
Correct URL encoding with REST API
prettify lost support for expanding tabs in r143 [1]. As a consequence,
tab width preference is no longer honored.
Gerrit now handles expanding tabs by itself in all cases, even if syntax
coloring is active.
[1] http://code.google.com/p/google-code-prettify/source/detail?r=143
Bug: issue 1872
Change-Id: I283a3620b1d130d3f66e56d3f202a5122d7a73b8
Change I6d82ce322d401743a8de5ab8090b2adc43a909f5 added a workaround for
a bug in prettify, by temporarily adding a space before each \n
character.
For files with CRLF line endings, this means replacing "\r\n" by
"\r<space>\n", which prettify sees as two lines. This leads to a
crash since Gerrit expects a consistent number of lines even after
prettify.
When Show Line Endings is active, the issue does not appear since \r
are replaced with a specific markup, without any actual \r.
Change-Id: I345e332225e449c6f26871476f1a07e67458da59
The Maven build does not work since the introduction of CodeMirror.
Remove the build until to prevent people from trying to use a broken
build process. If buck is rejected this commit will be reverted, and
we will attempt to fix the Maven build to include CodeMirror. If buck
is accepted, we just saved time by avoiding a messy Maven change.
Change-Id: I147d8d1741d52f59de1d2ddce8e5e82583990c14
Implement a new build system using Buck[1], Facebook's
open source clone of Google's internal build system.
Pros:
- Concise build language
- Test and build output is concise
- Test failures and stack traces show on terminal
- Reliable incrementals; clean is unnecessary
- Extensible with simple blocks of Python
- Fast
buck: clean: 0.452s, full 1m21.083s [*], no-op: 7.145s,
mvn: clean: 4.596s, full 2m53.776s, no-op: 59.108s,
[*] full build includes downloading all dependencies,
time can vary due to remote server performance.
Cons:
- No Windows support
- No native Maven Central support (added by macros)
- No native GWT, Prolog, or WAR support (added by macros)
- Bootstrap of buck requires Ant
Getting started:
git clone https://gerrit.googlesource.com/buck
cd buck
ant
Mac OS X:
PATH="`pwd`/bin:/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands:$PATH"
Linux:
PATH="`pwd`/bin:$PATH"
Importing into Eclipse:
$ time buck build :eclipse
0m48.949s
Import existing project from `pwd`
Import 'gerrit' (do not import other Maven based projects)
Expand 'gerrit'
Right click 'buck-out' > Properties
Under Attributes check 'Derived'
If the code doesn't currently compile but an updated classpath
is needed, refresh the configs and obtain missing JARs:
$ buck build :eclipse_project :download
Running JUnit tests:
$ time buck test --all -e slow # skip slow tests
0m19.320s
$ time buck test --all # includes acceptance tests
5m17.517s
Building WAR:
$ buck build :gerrit
$ java -jar buck-out/gen/gerrit.war
Building release:
$ buck test --all && buck build :api :release
$ java -jar buck-out/gen/release.war
$ ls -lh buck-out/gen/{extension,plugin}-api.jar
Downloading dependencies:
Dependencies are normally downloaded automatically, but Buck can
inspect its graph and download missing dependencies so future
compiles can run without the network:
$ buck build :download
[1] http://facebook.github.io/buck/
Change-Id: I40853b108bd8e153cefa0896a5280a9a5ff81655
This cleans up a weird dependency in the build tree for any Buck based
build. Most of these classes are meant only to be compiled for GWT and
do not build at the server side. Maven allowed sloppy use of gwt-user,
making it difficult to identify this earlier.
Change-Id: Id86e74f2f0760c9853829483899379353e5ada13
Change I34fb07f incorrectly "fixed" the brackets in the `toString`
method, however the usage of [ and ) was intentional, to denote that
the range is inclusive/exclusive.
Add a short comment in the method to prevent the same mistake from
being made again.
Change-Id: Idfe9b560c0cc55bfa4a6ab06fba172d971c3089c
This reverts commit 17daae9934941bc6db6b372a04433f19186d5972
The use of ) was intentional as the range is inclusive, exclusive.
Change-Id: I1aa25b6d8a17a374766c6316ee1872c4272e609e
Inserting "<lf>\n" doesn't work. Prettify leaves the <lf> but
often inserts a <span> tag between <lf> and \n leaving a very
deep tag stack for the DOM to handle. This is really slow to
render and can cause mis-rendering.
Insert a space before LF. Most prettify styles will treat this
as the same as the LF, allowing the trailing space to be removed
before splitting by line.
Change-Id: I85d12c590a8d1bda1b1b66874a0dddb4628a8655
Latest prettify build appears to delete empty lines from the end of
the input file. This causes Gerrit to crash with array exceptions
because the formatted HTML is a different length then the diff
hunks indicate.
Work around the broken prettify by inserting a fake HTML tag before
each LF and removing it after formatting is complete.
Change-Id: I6d82ce322d401743a8de5ab8090b2adc43a909f5