Version 3, last updated by Miles Sabin at December 15, 2011 11:15 UTC
Proposed Repository Reorganization
Facts
- Egit currently has no support for git submodules and will corrupt repositories which are set up for submodules.
- Egit currently supports multiple related projects by having them contained within a single git repository.
- Eclise requires a one-one correspondence between Eclipse projects and OSGi bundles for self-hosted development.
- git-svn can only synchronize changes between a single git repository and a single standard subversion trunk/tags/branches structure.
- The IDE projects in EPFL svn currently each have independent trunk/tags/branches structures.
- Mechanisms for linking multiple git repositories (ie. submodules and subtree merges) are fiddly and error prone and impose a complexity burden on all developers.
- Assembla supports multiple repositories within a single space, however all but the first have "funny" URLs with an essentially random integer as a suffix.
- Checking out a large number of repositories simultaneously is fiddly and error prone without scripts (which are platform dependent).
- git doesn't support partial checkouts.
- Assembla spaces' dashboards and streams are quite noisy.
- The core Scala toolchain is huge and rapidly changing.
- IDE development work only involves infrequent modifications to the core Scala toolchain.
- IDE development work frequently touches multiple IDE projects.
- git only supports atomic commits across multiple repositories via submodules.
- Eclipse development styles strongly encourage multi-project/bundle structures.
- Compatiblity issues between the AspectJ and Scala Eclipse tooling force the IDE's AspectJ components to be in a separate project.
Goals
- We want to make it as easy as possible for people to check out the IDE sources and make small contributions.
- We want to make it easy to track development of the IDE.
- We want to be able to make atomic commits across all the IDE projects.
- We want to be able to make atomic commits across the core Scala toolchain and the IDE projects.
- We want tickets to be shared across all IDE projects.
- We want to be able to easily add new IDE projects and subdivide existing ones.
- We want to be able to synchronize all changes between Assembla and EPFLs svn.
- We want to be minimally disruptive of existing svn checkouts from EPFL svn (one of which is EPFLs nightly build).
Analysis
- G1 and F1,6 imply avoiding git submodules.
- G1,3,6 and F2,6,8,13,14 imply that all the IDE projects should be contained in a single git repository.
- G1,2 and F9,10,11 imply that the core Scala toolchain and the IDE projects should be in separate repositories.
- A3 and F14 imply that G4 cannot be met. F12 suggest this isn't that big a deal.
- A2 implies that G5 is met.
- F3,15,16 imply that there must be multiple IDE projects.
- A2,6 and F4,5 imply that the EPFL repository structure must be changed.
- A7 implies that G7 cannot be met and G8 might be tricky.
- G1,2 and F7,10 imply that the core Scala toolchain and the IDE projects should be in separate Assembla spaces.
Resolution
- We will move the core Scala toolchain git repository to a separate Assembla space (G1,2,5).
- We will combine the IDE projects into a single git repository (G1,3,5,6).
- We will live with the breakage due to the restructuring in EPFL svn that follows from G4,7 not being met.
- We will work with EPFL to ensure that their nightly builds continue to work smoothly (G8).