mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 01:07:15 +03:00
108b468af3
Summary: This is the fix that might be hard to explain. First, why we need `generate_additional_bonsai_file_changes()` function at all. TL;DR is to fix pushrebasing of a diamond merge commit. Merge bonsai changeset must have a file change entry if p1 and p2 has the same file with different content, and when merge commit is pushrebased we need to preserve this property. more details are in D18065013 and in the comments. Secondly, what was wrong with generate_additional_bonsai_file_changes. While it was technically correct (i.e. it was producing valid bonsai changeset) it had an unexpected side-effect for non-diamond merges (e.g. repo imports). It was adding all changed files between root and onto commit (i.e. all changed files from commits over which it was rebased). This in turn leads to unnecessary push failures with "conflicts" errors. Thirdly, why it was wrong. generate_additional_bonsai_file_changes a) finds all files changed between onto and root (see comments for more details about onto and root), b)then finds those that needs to be added in the pushrebase merge bonsai changeset. The problem was in step b). It needed to check which files exists in merge parent but instead it checked which files exists in merge commit itself. This is because merge commit itself cannot change any of the files that were changed between root and onto - in that case we get a pushrebase conflict. So all the files come either from root commit or from another parents. And the entry can become "stale" only if it existed in one of the parents and later was changed between root and onto. Reviewed By: krallin Differential Revision: D21596758 fbshipit-source-id: f2bea36fcc29fc736caaa7494696a1f6dc848b9e |
||
---|---|---|
.. | ||
src | ||
Cargo.toml |