blob: 3103f185d99ac6fdfe3f5fc3152542279f1486f4 [file] [log] [blame] [view]
# Gemini Project Profile: gerrit
This document provides a summary of the development environment for the gerrit project.
## Overview
Gerrit is a web-based code review tool, which integrates with Git and allows developers to review, approve, and merge code changes.
- **Primary Language (Backend)**: Java
- **Primary Language (Frontend)**: TypeScript (in `polygerrit-ui`)
- **Build Tool**: Bazel
- **Package Manager**: `yarn` (for frontend dependencies)
## Sub-projects
This repository contains multiple sub-projects. For more detailed information, please refer to the `GEMINI.md` file within each sub-project directory.
- **`polygerrit-ui`**: The frontend web application. See `polygerrit-ui/GEMINI.md` for details on the frontend development environment.
## Backend (Java)
The core backend logic is written in Java and is located in the `java/` directory. The main package is `com.google.gerrit`. Key sub-packages include:
- `acceptance`: Acceptance tests
- `server`: Core server logic, including servlets, REST API endpoints, and change processing.
- `git`: Git-related operations and management.
- `sshd`: SSH server implementation for Git operations and administration.
- `index`: Indexing and search functionality.
- `auth`: Authentication and authorization logic.
### Testing (Java)
Java tests are located in the `javatests/` directory, mirroring the structure of the `java/` directory. Key sub-packages include:
- `acceptance`: Acceptance tests
- `integration`: Integration tests
- `server`: Tests for the core server logic.
- `git`: Tests for Git-related operations.
### Running Tests
You can run tests using `bazel test`.
**Run a specific test:**
```bash
bazel test //javatests/com/google/gerrit/acceptance/rest/project:ListLabelsIT
```
**Run a test suite:**
```bash
bazel test //javatests/com/google/gerrit/httpd:httpd_tests
```
```bash
bazel test //javatests/com/google/gerrit/acceptance/server/change:server_change
```
**Run a specific test method:**
This command runs a single test method and streams the output.
```bash
bazel test --test_output=streamed --test_filter=com.google.gerrit.server.fixes.fixCalculator.FixCalculatorVariousTest.intraline //javatests/com/google/gerrit/server:server_tests
```
**Run tests with a filter:**
```bash
bazel test //javatests/com/google/gerrit/acceptance/rest/change:rest_change_other --test_filter=SuggestReviewersIT
```
### Code Formatting (Java)
The project uses `google-java-format` to format Java code, via the wrapper script `tools/gjf.sh`.
#### Formatting modified Java files
To format all modified Java files:
```bash
tools/gjf.sh run
```
## Documentation
The `Documentation/` directory contains a wealth of information about Gerrit, including:
- **User Guide**: `user-*.txt` files explain how to use Gerrit.
- **Administrator Guide**: `config-*.txt` and `install-*.txt` files provide information for administrators.
- **Developer Guide**: `dev-*.txt` files contain information for developers working on Gerrit itself.
- **REST API**: `rest-api-*.txt` files document the REST API endpoints.
- **Commands**: `cmd-*.txt` files document the available command-line tools.
## Git
Every commit message must contain a `Release-Notes:` footer. Small changes, fixes or refactorings can just have
`Release-Notes: skip`. If the change is relevant for being called out in release notes, then append a short
summary to the `Release-Notes:` footer.