Self Merges
What is a self merge?
A “self merge” is when the author of commits in a pull request is also the maintainer who runs the merge script.
How can you detect them?
It’s hard.
Why do we think they’re problematic
Fair question. We’re concerned about bitcoin being subverted. There are plenty of reasons you might like to do that. One way could be through spoiling the codebase.
What do they look like?
Example 1
Here’s an example of a Self Merge
MarcoFalke
has merged two commits which were written by MarkoFalke
. This is an example of a self merge.
1
2
3
4
5
6
7
8
9
10
Merge #21792: test: Fix intermittent issue in p2p_segwit.py
fad6269 test: Assert that exit code indicates failure (MarcoFalke)
faecb72 test: Fix intermittent issue in p2p_segwit.py (MarcoFalke)
Pull request description:
Calling `start_node` might call `wait_for_rpc_connection`, which will fail.
https://cirrus-ci.com/task/5669555591708672?logs=ci#L3504
1
2
3
4
5
6
File "/tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/test/functional/p2p_segwit.py", line 1974, in test_upgrade_after_activation
self.start_node(2, extra_args=["-reindex", f"-segwitheight={SEGWIT_HEIGHT}"])
File "/tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/test/functional/test_framework/test_framework.py", line 508, in start_node
node.wait_for_rpc_connection()
File "/tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/test/functional/test_framework/test_node.py", line 224, in wait_for_rpc_connection
raise FailedToStartError(self._node_msg( test_framework.test_node.FailedToStartError: [node 2] bitcoind exited with status 1 during initialization
ACKs for top commit: jnewbery: ACK fad6269 dhruv: ACK fad6269
Tree-SHA512: 4c5e39ce25e135717ea433258518f93f09d1c528c4538a8627d3da13bc0c0ba4b45911703c26392ff0f5e0cb7831a6c7cc53e6e29102d3da9c8cfce7cef333cc ```