An Approach for Updating Forks against the Original Project
Several software projects start from an existing project. This practice, in the VCS ecosystem, is called fork. For instance, the Bootstrap project, initially developed on Twitter, today has more than 68,000 forks, which indicates that several projects started from the Bootstrap source code at a certain moment and are being customized. The problem occurs when customized projects want to obtain updates from the original project, i.e., new features, bug fixes, etc. The merge of the source code between the original and the customized projects usually generates conflicts that need human resolution. More important, the resolution of those conflicts might not be trivial and poses an arduous task for developers. This article, therefore, proposes an approach for updating forks against the original project where features are modularized, documented, traceable, and can be reused. We claim that the such task can no longer be carried out on an ad hoc basis. In a nutshell, instead of modify the method foo from the original project, the developer implements it locally and specifies, using one of the nine instructions of the proposed DSL, something like "replace the foo method with local implementation". We have developed a tool that automates our approach and conducted an evaluation on a large-scale real-world project that is regularly updated against your original project.