= Gerrit Code Review: Developer Setup

To build a developer instance, you'll need link:https://bazel.build/[Bazel] to
compile the code.

== Git Setup

=== Getting the Source

Create a new client workspace:

----
  git clone --recurse-submodules https://gerrit.googlesource.com/gerrit
  cd gerrit
----

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

=== Switching between branches

When using `git checkout` without `--recurse-submodules` to switch between
branches, submodule revisions are not altered, which can result in:

*  Incorrect or unneeded plugin revisions.
*  Missing plugins.

After you switch branches, ensure that you have the correct versions of
the submodules.

CAUTION: If you store Eclipse or IntelliJ project files in the Gerrit source
directories, do *_not_* run `git clean -fdx`. Doing so may remove untracked files and damage your project. For more information, see
link:https://git-scm.com/docs/git-clean[git-clean].

Run the following:

----
  git submodule update
  git clean -ffd
----

[[compile_project]]
== Compiling

For details, see <<dev-bazel#,Building with Bazel>>.


== Testing

[[tests]]
=== Running the acceptance tests

Gerrit contains acceptance tests that validate the Gerrit daemon via REST, SSH,
and the Git protocol.

A new review site is created for each test and the Gerrit daemon is
then started on that site. When the test is completed, the Gerrit daemon is
shut down.

For instructions on running the acceptance tests with Bazel,
see <<dev-bazel#tests,Running Unit Tests with Bazel>>.


== Local server

[[init]]
=== Site Initialization

After you compile the project <<compile_project,(above)>>, run the Gerrit
`init`
command to create a test site:

----
  export GERRIT_SITE=~/gerrit_testsite
  $(bazel info output_base)/external/local_jdk/bin/java \
      -jar bazel-bin/gerrit.war init --batch --dev -d $GERRIT_SITE
----

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

This command takes two parameters:

* `--batch` assigns default values to several Gerrit configuration
    options. To learn more about these options, see
    link:config-gerrit.html[Configuration].
* `--dev` configures the Gerrit server to use the authentication
  option, `DEVELOPMENT_BECOME_ANY_ACCOUNT`, which enables you to
  switch between different users to explore how Gerrit works. To learn more
  about setting up Gerrit for development, see
  link:dev-readme.html[Gerrit Code Review: Developer Setup].

After initializing the test site, Gerrit starts serving in the background. A
web browser displays the Start page.

On the Start page, you can:

.  Log in as the account you created during the initialization process.
.  Register additional accounts.
.  Create projects.

To shut down the daemon, run:

----
  $GERRIT_SITE/bin/gerrit.sh stop
----


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

To create more accounts on your development instance:

.  Click 'become' in the upper right corner.
.  Select 'Switch User'.
.  Register a new account.
.  link:user-upload.html#ssh[Configure your SSH key].

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
----

To use the `HTTP` protocol, run:

----
git clone http://username@localhost:8080/projectname
----

The default password for user `admin` is `secret`. You can regenerate a
password in the UI under User Settings -- HTTP credentials. The password can be
stored locally to avoid retyping it:

----
git config --global credential.helper store
git pull
----

To create changes as users of Gerrit would, run:

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

[[run_daemon]]
=== Running the Daemon

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

----
  $(bazel info output_base)/external/local_jdk/bin/java \
     -jar bazel-bin/gerrit.war daemon -d $GERRIT_SITE \
     --console-log
----

NOTE: To learn why using `java -jar` isn't sufficient, see
<<special_bazel_java_version,this explanation>>.

To debug the Gerrit server of this test site:

.  Open a debug port (such as port 5005). To do so, insert the following code
immediately after `-jar` in the previous command. To learn how to attach
IntelliJ, see <<dev-intellij#remote-debug,Debugging a remote Gerrit server>>.

----
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
----

=== Running the Daemon with Gerrit Inspector

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

Gerrit Inspector appears on the system console whenever the system starts.
Leaving the Inspector shuts down the Gerrit instance.

To troubleshoot, the Inspector enables interactive work as well as running of
Python scripts.

To start the Inspector, add the '-s' option to the daemon start command:

----
  $(bazel info output_base)/external/local_jdk/bin/java \
     -jar bazel-bin/gerrit.war daemon -d $GERRIT_SITE -s
----

NOTE: To learn why using `java -jar` isn't sufficient, see
<<special_bazel_java_version,this explanation>>.

Inspector examines Java libraries, loads the initialization scripts, and
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
  >>>
----

When the Inspector is enabled, you can use Gerrit as usual and all
interfaces (including HTTP and SSH) are available.

CAUTION: When using the Inspector, be careful not to modify the internal state
of the system.


== Setup for backend developers

=== Configuring Eclipse

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

To configure the Eclipse workspace with Bazel, see
link:dev-bazel.html#eclipse[Eclipse integration with Bazel].

=== Configuring IntelliJ IDEA

See <<dev-intellij#,IntelliJ Setup>> for details.

== Setup for frontend developers
See link:https://gerrit.googlesource.com/gerrit/+/master/polygerrit-ui/README.md[Frontend Developer Setup].


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

SEARCHBOX
---------
