Published on: 2013-08-17T20:53:36+00:00
On August 16, 2013, a pull request (#2702) was merged into the master branch of Ripple, but instead of updating to LevelDB 1.12.0, it was put on an unofficial Ripple fork of LevelDB. Vinnie had mentioned this change, but its full implications were not understood. Initially, it was believed that the "Ripple and Bitcoin fork" was just LevelDB with the necessary changes already made. However, it was later discovered that there were additional changes included in the merge.This improper merge by Ripple's fork resulted in a break in git history, causing several upstream fixes, including ones reported to the Bitcoin issue tracker, to be excluded. To address this issue, Luke-Jr pushed three branches to https://github.com/luke-jr/leveldb: bitcoin-1.5 for reference, bitcoin (included in 0.8.x), and bitcoin-up (merged with upstream LevelDB 1.12). A diff from the current master branch (Ripple LevelDB 1.12 fork) to bitcoin-up can be accessed at https://gist.github.com/luke-jr/6248543.Although the changes in the merge appeared harmless, Pieter Todd suggested reverting to a codebase that closely matched upstream LevelDB 1.12. A comparison between the bitcoin head and bitcoin-up revealed that a few patches were reverted during the merge window of version 0.9. To clean up the history of the LevelDB subtree in the http://github.com/bitcoin/leveldb repository, Pieter created a branch called bitcoin-fork and used git-subtree to create a pull request (#2907). This pull request switches the src/leveldb directory to the cleaned-up tree, listing the reverted changes in a squashed commit that corresponds to the actual diff produced by Luke-Jr.Peter Todd, who had encountered a similar issue while auditing Litecoin, commented on the situation. He noted that there are currently no tools available to audit whether a set of git patches/merges match upstream or downstream. While manually checking individual files could be done, automating this process would be beneficial.In summary, a pull request merged into the master branch of Ripple resulted in it being put on an unofficial Ripple fork of LevelDB instead of updating to LevelDB 1.12.0. This merge included additional changes beyond what was initially believed, and Ripple's improper git merge created a break in history, excluding several upstream fixes. Luke-Jr pushed three branches for reference, and a diff between the current master branch and bitcoin-up can be found via the provided link. Pieter Todd suggested reverting to a codebase closer to upstream LevelDB 1.12, and he cleaned up the history of the LevelDB subtree in the bitcoin repository. Peter Todd also highlighted the need for tools to automate the auditing of git patches/merges.
Updated on: 2023-08-01T05:39:23.219655+00:00