)]}'
{
  "commit": "cf7d8fd66e41e857d764003c3d49dc65d76ec4f5",
  "tree": "1673e24bd59b86248c109053949b5bcc95ad41e5",
  "parents": [
    "0ae42bb19be3aeb5a12820913f7b0b273bdddf6b"
  ],
  "author": {
    "name": "Dmitrii Filippov",
    "email": "dmfilippov@google.com",
    "time": "Tue Oct 17 18:14:42 2023 +0200"
  },
  "committer": {
    "name": "Dmitrii Filippov",
    "email": "dmfilippov@google.com",
    "time": "Mon Nov 20 16:03:45 2023 +0000"
  },
  "message": "Reject implicit merges on submit (except for cherry pick submit type).\n\nGerrit can check if a change implicitly merges another branch to the\ntarget branch when changes are pushed to gerrit (see [1]).\n\nHowever, it is possible to bypass this limitation by creating a chain of\nchanges, which includes an explicit merge, e.g.\n\nchange 1:\n  parent - \"stable\" branch;\n  target - \"master\" branch.\nchange 2:\n  parents - \"change 1\" and \"master\" branch (explicit merge)\n  target - \"master\" branch\n\nIf these 2 changes are pushed together, gerrit accepts them even if\nrejectImplicitMerges [1] is set to true. This is correct behaviour,\nbecause change 2 is an explicit merge.\n\nIf later only the change 1 is submitted, then the stable branch is\nimplicitly merged into master branch. This is an implicit merge; gerrit\nshould reject it and instead it should only allow submitting change 2\ntogether with change 1.\n\nThis fix adds additional checks (to the MergeOp class) to reject\nimplicit merges. This check is guarded by experiments, so we can ensure\nthat this fix doesn\u0027t break valid workflows.\n\nThe cherry pick submit strategy is excluded from this check, because it\nalways merges a single change (i.e. it never merges chain of changes).\nAdding a check to this strategy will break normal use-cases. At the same\ntime, cherry pick strategy never brings content from another branch. It\nonly applies diff to the target branch - so it can\u0027t be used to silently\nmerge another change.\n\n[1] https://gerrit-review.googlesource.com/Documentation/config-project-config.html#receive.rejectImplicitMerges\n\nBug: Google b/271135486\nRelease-Notes: skip\nChange-Id: I387105f666e05920b268c4512762adc343f3af93\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "80582a47ec3691d067a1cbba5ee29cdb96eaef59",
      "old_mode": 33188,
      "old_path": "java/com/google/gerrit/acceptance/AbstractDaemonTest.java",
      "new_id": "b2924efb708f50d0200197ea5fa514f9ec7522a5",
      "new_mode": 33188,
      "new_path": "java/com/google/gerrit/acceptance/AbstractDaemonTest.java"
    },
    {
      "type": "modify",
      "old_id": "32ec401a842409e5c1313b73b485b30b0adeebac",
      "old_mode": 33188,
      "old_path": "java/com/google/gerrit/server/experiments/ExperimentFeaturesConstants.java",
      "new_id": "52c1f6b09ba589e96ecc73dbd08cc95597da645f",
      "new_mode": 33188,
      "new_path": "java/com/google/gerrit/server/experiments/ExperimentFeaturesConstants.java"
    },
    {
      "type": "modify",
      "old_id": "2b8a66225d06eec38d4d909e193808ec4659c509",
      "old_mode": 33188,
      "old_path": "java/com/google/gerrit/server/submit/MergeOp.java",
      "new_id": "7db0c3b43abc0d6f8184622144efffec26e4b079",
      "new_mode": 33188,
      "new_path": "java/com/google/gerrit/server/submit/MergeOp.java"
    },
    {
      "type": "modify",
      "old_id": "a93c0a5039f7f5839bad1651a0c3eb3edcaa9b9f",
      "old_mode": 33188,
      "old_path": "javatests/com/google/gerrit/acceptance/api/project/ProjectIT.java",
      "new_id": "540e4431ad2654538597ab208841bbdb7902d147",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/acceptance/api/project/ProjectIT.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fe195f556c0c0a31c7f49a881203d2738b1e3c1b",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/acceptance/git/AbstractImplicitMergeTest.java"
    },
    {
      "type": "rename",
      "old_id": "e352e2d512463facb93d45d9ee66d19fc937142b",
      "old_mode": 33188,
      "old_path": "javatests/com/google/gerrit/acceptance/git/ImplicitMergeCheckIT.java",
      "new_id": "90ba7c15c6a78d641720465b3adc83f0366be0cf",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/acceptance/git/ImplicitMergeCheckOnReceiveIT.java",
      "score": 77
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d019fb938e2d5ebe6400c0fd84babf2387d196fc",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/acceptance/git/ImplicitMergeOnSubmitCherryPickIT.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d778ef23b6f5600d006e140e5dfc8bbfef19ec52",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/acceptance/git/ImplicitMergeOnSubmitExperimentsIT.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69d54b8118edd98b4d8c62876f714bca76078b3",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/acceptance/git/ImplicitMergeOnSubmitIT.java"
    },
    {
      "type": "modify",
      "old_id": "f8ec7bfc50309207df423eeeea37953d39869681",
      "old_mode": 33188,
      "old_path": "javatests/com/google/gerrit/acceptance/rest/change/SubmitByMergeIfNecessaryIT.java",
      "new_id": "dccc057e4e36fada63b47d85b95ec4417e572358",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/acceptance/rest/change/SubmitByMergeIfNecessaryIT.java"
    },
    {
      "type": "modify",
      "old_id": "e011ffc053ead5f480ac9839410e6b485aa303a2",
      "old_mode": 33188,
      "old_path": "javatests/com/google/gerrit/acceptance/server/experiments/ExperimentFeaturesIT.java",
      "new_id": "e17215378634b19821c1f8309aa7b183f8a86962",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/acceptance/server/experiments/ExperimentFeaturesIT.java"
    }
  ]
}
