Cherry-Pick: Do not fail if non-visible users are involved

If a change is cherry-picked, Gerrit automatically adds the change owner
and the reviewers of the cherry-picked change as reviewers on the
cherry-pick change. CCs of the cherry-picked change are automatically
added as CCs on the cherry-pick change.

Same as for revert (see change I8264d96f7) the visibility check for
these explicit reviewers/CCs should be skipped.

So far cherry-pick failed if any of the accounts that are added as
reviewers/CCs on the cherry-pick change are not visible to the caller.
Failing in this case is unnecessary since the user doing the cherry-pick
already knows about the existence of the reviewer/CC accounts (see
below) and hence we can just skip the account visibility check for them
during cherry-pick.

Cherry-picking a change is only possible if the calling user can see the
change that is being cherry-picked. If a user can see the change, they
can also see the change owner and all its reviewers/CCs regardless of
whether these accounts are visible. This means the user doing the
cherry-pick knows that Gerrit accounts exists for all users the are
either change owners, reviewer or CC on the cherry-picked change. This
means we can preserve them as reviewers/CCs on the cherry-pick change,
even if their accounts are not visible to the user doing the cherry-pick
(as it doesn't expose the existence of accounts that the user didn't
already know before).

In addition cherry-pick also implicitly CCs the author and committer if
they are forged. Here the situation is a bit different. It's possible
that there are no matching accounts for the author and committer, hence
from being able to see the author and committer information on the
cherry-picked change one cannot deduce that corresponding Gerrit
accounts exists. Hence we can only CC them on the cherry-pick change if
they are visible to the user doing the cherry-pick, as otherwise the
account existence would be revealed. If the author/committer accounts
are not visible we silently drop CCing them now so that the cherry-pick
can still succeed in this case. We do the same when pushing commits with
forged authors/committers so that doing local cherry-picks can also
succeed if the accounts of the forged authors/committers are not
visible.

Bug: Issue 16274
Bug: Google b/232285749
Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I1531d1f95b572b89998a82d503c3a3bb23f8712d
Release-Notes: skip
6 files changed
tree: 4ce0372eb66e7f110fc2f215c1ea2da079397e9c
  1. .settings/
  2. .ts-out/
  3. antlr3/
  4. contrib/
  5. Documentation/
  6. e2e-tests/
  7. java/
  8. javatests/
  9. lib/
  10. modules/
  11. plugins/
  12. polygerrit-ui/
  13. prolog/
  14. prologtests/
  15. proto/
  16. resources/
  17. tools/
  18. webapp/
  19. .bazelignore
  20. .bazelproject
  21. .bazelrc
  22. .bazelversion
  23. .editorconfig
  24. .git-blame-ignore-revs
  25. .gitignore
  26. .gitmodules
  27. .gitreview
  28. .mailmap
  29. .pydevproject
  30. .zuul.yaml
  31. BUILD
  32. COPYING
  33. INSTALL
  34. Jenkinsfile
  35. package.json
  36. README.md
  37. SUBMITTING_PATCHES
  38. version.bzl
  39. web-dev-server.config.mjs
  40. WORKSPACE
  41. yarn.lock
README.md

Gerrit Code Review

Gerrit is a code review and project management tool for Git based projects.

Build Status Maven Central

Objective

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.

Documentation

For information about how to install and use Gerrit, refer to the documentation.

Source

Our canonical Git repository is located on googlesource.com. There is a mirror of the repository on Github.

Reporting bugs

Please report bugs on the issue tracker.

Contribute

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.

Getting in contact

The Developer Mailing list is repo-discuss on Google Groups.

License

Gerrit is provided under the Apache License 2.0.

Build

Install Bazel and run the following:

    git clone --recurse-submodules https://gerrit.googlesource.com/gerrit
    cd gerrit && bazel build release

Install binary packages (Deb/Rpm)

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

Use pre-built Gerrit images on Docker

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.