blob: 6ff064cc2cf9b331703dd1a42ef2178544c75c49 [file] [log] [blame]
:linkattrs:
= Gerrit Code Review: Developer Setup
To build a developer instance, you'll need link:https://bazel.build/[Bazel,role=external,window=_blank] to
compile the code, preferably launched with link:https://github.com/bazelbuild/bazelisk[Bazelisk,role=external,window=_blank].
== Git Setup
[[clone]]
=== Getting the Source
Create a new client workspace:
----
git clone --recurse-submodules https://gerrit.googlesource.com/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.
Next setup the commit-hook. This is necessary to ensure that each commit has a
`Change-Id`.
----
cd gerrit && (
cd .git/hooks
ln -s ../../resources/com/google/gerrit/server/tools/root/hooks/commit-msg
)
----
=== 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,role=external,window=_blank].
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>>.
[[e2e]]
=== End-to-end tests
<<dev-e2e-tests#,This document>> describes how `e2e` (load or functional) test
scenarios are implemented using link:https://gatling.io/[`Gatling`,role=external,window=_blank].
== 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>>.
NOTE: When launching the daemong this way, the settings from the `[container]` section from the
`$GERRIT_SITE/etc/gerrit.config` are not honored.
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 honoring the [container] section settings
To run the Daemon and honor the `[container]` section settings use the `gerrit.sh` script:
----
$ cd $GERRIT_SITE
$ bin/gerrit.sh run
----
To run the Daemon in debug mode use the `--debug` option:
----
$ bin/gerrit.sh run --debug
----
The default debug port is `8000`. To specify a different debug port use the `--debug-port` option:
----
$ bin/gerrit.sh run --debug --debug-port=5005
----
The `--debug-address` option also exists and is a synonym for the ``--debug-port` option:
----
$ bin/gerrit.sh run --debug --debug-address=5005
----
Note that, by default, the debugger will only accept connections from the localhost. To enable
debug connections from other host(s) provide also a host name or wildcard in the `--debug-address`
value:
----
$ bin/gerrit.sh run --debug --debug-address=*:5005
----
Debugging the Daemon startup requires starting the JVM in suspended debug mode. The JVM will await
for a debugger to attach before proceeding with the start. Use the `--suspend` option for that
scenario:
----
$ bin/gerrit.sh run --debug --suspend
----
=== 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
---------