= Gerrit Code Review - Developer Setup

Bazel or Facebook Buck is needed to compile the code, and an SQL database to
house the review metadata.  H2 is recommended for development
databases, as it requires no external server process.


== Getting the Source

Create a new client workspace:

----
  git clone --recursive https://gerrit.googlesource.com/gerrit
  cd gerrit
----

The `--recursive` option is needed on `git clone` to ensure that
the core plugins, which are included as git submodules, are also
cloned.

[[compile_project]]
== Compiling

Please refer to either <<dev-buck#,Building with Buck>> or
<<dev-bazel#,Building with Bazel>>.


== Switching between branches

When switching between branches with `git checkout`, be aware that
submodule revisions are not altered.  This may result in the wrong
plugin revisions being present, unneeded plugins being present, or
expected plugins being missing.

After switching branches, make sure the submodules are at the correct
revisions for the new branch with the commands:

----
  git submodule update
  git clean -fdx
----

CAUTION: If you decide to store your Eclipse/IntelliJ project files in the
Gerrit source directories, executing `git clean -fdx` will remove them and hence
screw up your project.


== Configuring Eclipse

To use the Eclipse IDE for development, please see
link:dev-eclipse.html[Eclipse Setup].

For details on how to configure the Eclipse workspace with Buck,
refer to: link:dev-buck.html#eclipse[Eclipse integration with Buck].


== Configuring IntelliJ IDEA

=== Build based on Buck

To use IntelliJ IDEA for development, the easiest way is to follow
Eclipse integration and then open it as Eclipse project in IDEA.
You need the Eclipse plugin activated in IntelliJ IDEA.

Once you start compiling using both buck and your Gerrit project in
IDEA, you will likely need to mark the below directories as generated
sources roots. You can do so using the IDEA "Project" view. In the
context menu of each one of these, use "Mark Directory As" to mark
them as "Generated Sources Root":

----
  __auto_value_tests_gen__
  __httpd_gen__
  __server_gen__
----

=== Build based on Bazel

Please refer to <<dev-intellij#,IntelliJ Setup>> for detailed
instructions.

== Mac OS X

On Mac OS X ensure "Java For Mac OS X 10.5 Update 4" (or later) has
been installed, and that `JAVA_HOME` is set to the
link:install.html#Requirements[required Java version].

Java installations can typically be found in
"/System/Library/Frameworks/JavaVM.framework/Versions".

You can check the installed Java version by running `java -version` in
the terminal.

[[init]]
== Site Initialization

After compiling <<compile_project,(above)>>, run Gerrit's 'init' command to
create a testing site for development use:

.Build based on Buck
----
  java -jar buck-out/gen/gerrit/gerrit.war init -d ../gerrit_testsite
----

.Build based on Bazel
----
  $(bazel info output_base)/external/local_jdk/bin/java \
     -jar bazel-bin/gerrit.war init -d ../gerrit_testsite
----

[[special_bazel_java_version]]
NOTE: You must use the same Java version that Bazel used for the build.
This Java version is available at
`$(bazel info output_base)/external/local_jdk/bin/java`.

During initialization, make two changes to the default settings:

* Change the listen addresses from '*' to 'localhost' to prevent outside
  connections from contacting the development instance; and
* Change the auth type from 'OPENID' to 'DEVELOPMENT_BECOME_ANY_ACCOUNT' to
  allow yourself to create and act as arbitrary test accounts on your
  development instance.

Continue through init until it completes. The daemon will automatically start in
the background and a web browser will launch to the start page. From here you
can sign in as the account created during init, register additional accounts,
create projects, and more.

When you want to shut down the daemon, simply run:

----
  ../gerrit_testsite/bin/gerrit.sh stop
----


[[localdev]]
== Working with the Local Server

If you need to create additional accounts on your development instance, click
'become' in the upper right corner, select 'Switch User', and then register
a new account.

Use the `ssh` protocol to clone from and push to the local server. For
example, to clone a repository that you've created through the admin
interface, run:

----
git clone ssh://username@localhost:29418/projectname
----

Then you'll be able to create changes the same way users do, with

----
git push origin HEAD:refs/for/master
----



== Testing


[[tests]]
=== Running the Acceptance Tests

Gerrit has a set of integration tests that test the Gerrit daemon via
REST, SSH and the git protocol.

A new review site is created for each test and the Gerrit daemon is
started on that site. When the test has finished the Gerrit daemon is
shutdown.

For instructions on running the integration tests with Buck,
please refer to:
link:dev-buck.html#tests[Running integration tests with Buck].
For Bazel, please refer to <<dev-bazel#tests,Running Unit Tests with Bazel>>.

[[run_daemon]]
=== Running the Daemon

The daemon can be directly launched from the build area, without
copying to the test site:

.Build based on Buck
----
  java -jar buck-out/gen/gerrit/gerrit.war daemon -d ../gerrit_testsite
----

.Build based on Bazel
----
  $(bazel info output_base)/external/local_jdk/bin/java \
     -jar bazel-bin/gerrit.war daemon -d ../gerrit_testsite
----

NOTE: Please refer to <<special_bazel_java_version,this explanation>>
for details why using `java -jar` isn't sufficient.


=== Running the Daemon with Gerrit Inspector

link:dev-inspector.html[Gerrit Inspector] is an interactive scriptable
environment to inspect and modify internal state of the system.

This environment is available on the system console after
the system starts. Leaving the Inspector will shutdown the Gerrit
instance.

The environment allows interactive work as well as running of
Python scripts for troubleshooting.

Gerrit Inspect can be started by adding '-s' option to the
command used to launch the daemon:

.Build based on Buck
----
  java -jar buck-out/gen/gerrit/gerrit.war daemon -d ../gerrit_testsite -s
----

.Build based on Bazel
----
  $(bazel info output_base)/external/local_jdk/bin/java \
     -jar bazel-bin/gerrit.war daemon -d ../gerrit_testsite -s
----

NOTE: Please refer to <<special_bazel_java_version,this explanation>>
for details why using `java -jar` isn't sufficient.

Gerrit Inspector examines Java libraries first, then loads
its initialization scripts and then starts a command line
prompt on the console:

----
  Welcome to the Gerrit Inspector
  Enter help() to see the above again, EOF to quit and stop Gerrit
  Jython 2.5.2 (Release_2_5_2:7206, Mar 2 2011, 23:12:06)
  [OpenJDK 64-Bit Server VM (Sun Microsystems Inc.)] on java1.6.0 running for Gerrit 2.3-rc0-163-g01967ef
  >>>
----

With the Inspector enabled Gerrit can be used normally and all
interfaces (HTTP, SSH etc.) are available.

Care must be taken not to modify internal state of the system
when using the Inspector.

=== Querying the Database

The embedded H2 database can be queried and updated from the
command line.  If the daemon is not currently running:

.Build based on Buck
----
  java -jar buck-out/gen/gerrit/gerrit.war gsql -d ../gerrit_testsite
----

.Build based on Bazel
----
  $(bazel info output_base)/external/local_jdk/bin/java \
     -jar bazel-bin/gerrit.war gsql -d ../gerrit_testsite -s
----

NOTE: Please refer to <<special_bazel_java_version,this explanation>>
for details why using `java -jar` isn't sufficient.

Or, if it is running and the database is in use, connect over SSH
using an administrator user account:

----
  ssh -p 29418 user@localhost gerrit gsql
----


[[debug-javascript]]
=== Debugging JavaScript

When debugging browser specific issues add `?dbg=1` to the URL so the
resulting JavaScript more closely matches the Java sources.  The debug
pages use the GWT pretty format, where function and variable names
match the Java sources.

----
  http://localhost:8080/?dbg=1
----


== Client-Server RPC

The client-server RPC implementation is gwtjsonrpc, not the stock RPC
system that comes with GWT.  This buys us automatic XSRF protection.
It also makes all of the messages readable and writable by any JSON
implementation, facilitating "mashups" and 3rd party clients.

The programming API is virtually identical, except service interfaces
extend RemoteJsonService instead of RemoteService.


== Why GWT?

We like it.  Plus we can write Java code once and run it both in
the browser and on the server side.


== External Links

Google Web Toolkit:

* http://code.google.com/webtoolkit/download.html[Download]

Apache SSHD:

* http://mina.apache.org/sshd/[SSHD]

H2:

* http://www.h2database.com/[H2]
* http://www.h2database.com/html/grammar.html[SQL Reference]

PostgreSQL:

* http://www.postgresql.org/download/[Download]
* http://www.postgresql.org/docs/[Documentation]


GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
