= Gerrit Code Review: Developer Setup To build a developer instance, you'll need link:https://bazel.build/[Bazel] to compile the code. == Getting the Source Create a new client workspace: ---- git clone --recurse-submodules 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 For details, see <>. == 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 <> for details. == MacOS On MacOS, ensure that "Java for MacOS X 10.5 Update 4" (or higher) is 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". To check the installed version of Java, open a terminal window and run: `java -version` [[init]] == Site Initialization After you compile the project <>, run the Gerrit `init` command to create a test site: ---- $(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, which is available at `$(bazel info output_base)/external/local_jdk/bin/java`. During initialization, change two settings from the defaults: * To ensure the development instance is not externally accessible, change the listen addresses from '*' to 'localhost'. * To allow yourself to create and act as arbitrary test accounts on your development instance, change the auth type from 'OPENID' to 'DEVELOPMENT_BECOME_ANY_ACCOUNT'. 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_testsite/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. 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 create changes as users of Gerrit would, run: ---- git push origin HEAD:refs/for/master ---- == 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 <>. [[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_testsite \ --console-log ---- NOTE: To learn why using `java -jar` isn't sufficient, see <>. 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 <>. ---- -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_testsite -s ---- NOTE: To learn why using `java -jar` isn't sufficient, see <>. 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. === Querying the database The embedded H2 database can be queried and updated from the command line. If the daemon is not running, run: ---- $(bazel info output_base)/external/local_jdk/bin/java \ -jar bazel-bin/gerrit.war gsql -d ../gerrit_testsite -s ---- NOTE: To learn why using `java -jar` isn't sufficient, see <>. Alternatively, if the daemon is running and the database is in use, use an administrator user account to connect over SSH: ---- ssh -p 29418 user@localhost gerrit gsql ---- == 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 ---- GERRIT ------ Part of link:index.html[Gerrit Code Review] SEARCHBOX ---------