commit | 69a81be96bbc0e978a282f583c32b31bf0654e7f | [log] [tgz] |
---|---|---|
author | Edwin Kempin <ekempin@google.com> | Tue May 30 15:23:17 2023 +0000 |
committer | Edwin Kempin <ekempin@google.com> | Tue May 30 15:23:17 2023 +0000 |
tree | 487737dfd87b99bc1ee99103ce2893c942f5c718 | |
parent | 6dcf285df02cc4ba5dfeffe46190b557a85b2c03 [diff] |
Do not fail when listing files for initial commit against the first parent DiffOperations used an empty *tree* as the base *commit* when getting the diff for an initial commit and the user specified comparing against the first parent (which doesn't exist). In this case the request failed with 500 ISE because the empty tree is not a commit and thus we run into an IncorrectObjectTypeException. Instead of failing in this case we are now falling back to comparing against the default root. This also makes the code more readable as it was quite confusing that the methods getParentCommit and getBaseCommit in BaseCommitUtil were actually not guaranteed to return a commit, but could return a Git tree instead. It seems that none of the callers was expecting and handling this. Now we return null as the base/parent commit if the commit doesn't have a parent. Null was already returned before when the commit had more than 2 parents, so returning null in the new case is consistent with that. FWIW null is not properly handled by all callers yet, but it is at least handled by the one caller now that is relevant for the use case that we are fixing here. The old code also used the inserter that was supposed for creating auto-merge commits only to insert the empty tree into the repository. It seems this was not intended and it's good if we can get rid of this now. At the moment at Google this issue happens very frequently and these errors are counted against our SLO budget, potentially triggering SLO violation alerts. Release-Notes: Fixed listing files for initial commit when user specified to compare against the first parent which doesn't exist Change-Id: I37edf7c394ef9472a641270798612652c6586c8c Signed-off-by: Edwin Kempin <ekempin@google.com> Bug: Google b/284443167
Gerrit is a code review and project management tool for Git based projects.
Gerrit makes reviews easier by showing changes in a side-by-side display, and allowing inline comments to be added by any reviewer.
Gerrit simplifies Git based project maintainership by permitting any authorized user to submit changes to the master Git repository, rather than requiring all approved changes to be merged in by hand by the project maintainer.
For information about how to install and use Gerrit, refer to the documentation.
Our canonical Git repository is located on googlesource.com. There is a mirror of the repository on Github.
Please report bugs on the issue tracker.
Gerrit is the work of hundreds of contributors. We appreciate your help!
Please read the contribution guidelines.
Note that we do not accept Pull Requests via the Github mirror.
The Developer Mailing list is repo-discuss on Google Groups.
Gerrit is provided under the Apache License 2.0.
Install Bazel and run the following:
git clone --recurse-submodules https://gerrit.googlesource.com/gerrit cd gerrit && bazel build release
The instruction how to configure GerritForge/BinTray repositories is here
On Debian/Ubuntu run:
apt-get update && apt-get install gerrit=<version>-<release>
NOTE: release is a counter that starts with 1 and indicates the number of packages that have been released with the same version of the software.
On CentOS/RedHat run:
yum clean all && yum install gerrit-<version>[-<release>]
On Fedora run:
dnf clean all && dnf install gerrit-<version>[-<release>]
Docker images of Gerrit are available on DockerHub
To run a CentOS 8 based Gerrit image:
docker run -p 8080:8080 gerritcodereview/gerrit[:version]-centos8
To run a Ubuntu 20.04 based Gerrit image:
docker run -p 8080:8080 gerritcodereview/gerrit[:version]-ubuntu20
NOTE: release is optional. Last released package of the version is installed if the release number is omitted.