[cc'ing ryan; he already has to deal with keeping multiple platforms in sync with mainline]
On Fri, Jul 26, 2013 at 4:06 PM, Andrew Fish <af...@apple.com> wrote: > On Jul 25, 2013, at 3:07 AM, Olivier Martin <olivier.mar...@arm.com> wrote: > > > Grant did some investigation a while ago when Linaro started to work on UEFI > > – see his email > > http://lists.linaro.org/pipermail/boot-architecture/2012-December/000192.html > > > > At some point I was also using 'git submodules' to avoid mixing EDK2 tree > > source code with one of the platforms I was working on that was not intended > > togo upstream. > > It is quite painful with git-submodules when you want your tree to contain > > all the latest head of the sub repositories. > > If you want your root EDK2 repository to always track the latest version of > > your platform repositories (a sub-directory of your root directory) then for > > every changes in the platform repository you make, you need to commit a > > change in the root directory to update the SHA1 of the git-submodule into > > the root repository. > > I'd think we would be splitting up into multiple repositories and use git > submodule to stitch together useful sets of things that people can download > in a single operation, with an associated web page that helps you get > started. A bit of context for my email: Everything discussed there is based on the assumption that mainline will not take platform support code. While it's possible to manage the tree that way, it incurs quite a lot of overhead. For Linaro it was important because we were trying to figure out how to create a long-lived branch to act as mainline for various platform support. As Olivier also discovered, it is quite painful to maintain. In the end we did none of the options described in the email. We instead took a branch off of edk2 in such a way that we can merge in mainline at anytime as well as apply platform support patches[1]. (Ryan, correct me if I quoted the wrong branch in the below URL). However, that is still just bodging around not having platform support in mainline. [1] https://git.linaro.org/gitweb?p=arm/uefi/uefi-next.git;a=shortlog;h=refs/heads/linaro-tracking By far I think it is preferable to have everything in one repository, for several reasons: - There never is any question about which versions of trees are needed to work together. It is implicit in the fact that there is only one repo. - It becomes possible to do cross-tree cleanups and consolidation that affects multiple platforms, or core code and platforms. For example, you may notice that three platforms are doing exactly the same thing and really should have a common utility function. - Same goes for bug fixes. My experience has been that bugs found in one board port often show up in others. - It's easier to deal with C ABI changes (I'm talking about direct C calls here, not stabilized protocols) when you have access to the call sites. We've had this exact problem in ARM when Olivier has needed to make a change to the core ARM support code, and that change has needed to be propagated to all of the ARM board support. - The workflow is *simple*. - Finally, from the project health perspective, I think it gets developers thinking about mainline instead of just their local project tree, and it gets them involved sooner since there will be encouragement to get there code into mainline. And we can do that with git without giving everyone direct commit access to the master repository. There would still need to be a one or more developers with core commit access, but other maintainers could send pull requests from their own public repository to get things merged into mainline. The counter point that could be made is that many other project successfully pull in multiple projects. Android is a really good example, and they use their 'repo' tool to pull in many separate git repositories into a single build environment. However, in my experience that is being done to pull together several separate independent projects that have a development life of their own independent of the meta project. UEFI really doesn't fit in that mode. Anyone doing board support is going to be building it directly on top of core UEFI; it is not practical to build that component independently from mainline tianocore. (BTW, Just to be clear, I'm not advocating that all board support must be mainlined; I can certainly think of several reasons for not wanting to mainline code.) g. ------------------------------------------------------------------------------ See everything from the browser to the database with AppDynamics Get end-to-end visibility with application monitoring from AppDynamics Isolate bottlenecks and diagnose root cause in seconds. Start your free trial of AppDynamics Pro today! http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel