Managing openbmc with subtree

Brad Bishop bradleyb at fuzziesquirrel.com
Sat Jul 21 03:43:33 AEST 2018


> On Jul 19, 2018, at 4:08 PM, Dave Cobbley <david.j.cobbley at linux.intel.com> wrote:
> 
> Brad,
> Trying to identify the appropriate work-flowfor using git subtree to maintain all the meta-data under openbmc.
> I'm imagining something like:
> 
> 17 subtrees
> ** indicates an actual folder, not subtree.
> meta-openembedded/
> meta-raspberrypi/
> meta-virtualization/
> poky/
> **meta-openbmc-machines/
> ** meta-arm
>    ├── common
>    └── meta-qualcomm
> **meta-evb
>    ├── meta-evb-aspeed
>    ├── meta-evb-nuvoton
>    ├── meta-evb-raspberrypi
> **meta-openpower
>    ├── meta-ibm
>    ├── meta-ingrasys
>    ├── meta-inventec
>    ├── meta-rackspace
> **meta-x86
>     ├── meta-intel
>     ├── meta-mellanox
>     ├── meta-portwell
>     └── meta-quanta
> **meta-openbmc-bsp/
>     ├── meta-aspeed
>     ├── meta-ibm
>     ├── meta-nuvoton
> meta-phosphor/
> 

This is a great picture, thanks.  My longer-term vision is a bit more like this:

meta-openembedded/
meta-virtualization/
poky/
meta-arm/
meta-openpower/
meta-x86/
meta-phosphor/

Or even ditching Yocto and just using OE-Core/bitbake directly:

meta-openembedded/
meta-virtualization/
meta/
bitbake/
meta-arm/
meta-openpower/
meta-x86/
meta-phosphor/

I could understand a case for including the BSPs in the base distro:

meta-openembedded/
meta-virtualization/
meta/
bitbake/
meta-arm/
meta-openpower/
meta-x86/
meta-phosphor/
meta-aspeed/
meta-ibm/ -> for our SOCs only, not servers
meta-nuvoton/
meta-raspberrypi/

The main thing to notice with all of these is I’ve removed meta-foo from
meta-openpower, meta-x86 and meta-arm.  This lets people have arm, power
and x86 servers all in the same layer or repo if they want:

meta-xyzcorp/
   |— meta-arm-server/
   |- meta-x86-server/
   |- meta-power-server/

Actually I’ve removed them from the repository completely.  I think we
need some kind of reference platform(s) just like Yocto.  Otherwise we are
going to wind up with too many server-layers in the distro.

Another idea is to scrap meta-openpower, meta-arm and meta-x86
and put all that content in meta-phosphor:

meta-openembedded/
meta-virtualization/
meta/
bitbake/
meta-phosphor/

What do you think of all this?  There is a lot of change here, so some
staging would be required.  Obviously all ideas are debatable.

> 
> I began working on the workflows that a typical dev would do to check code in and have Jenkins automatically update the top level repo with the new additions, but run into troublewith a merge commit.
> 
> 1. git clone openbmc-openbmc
> 2. #make changes
> 3. git add
> 4. git commit...
> 5. git subtree push --prefix=path/to/local/subtree ssh://openbmc.gerrit/openbmc/<subtree_name> HEAD:refs/for/master

Looks good to me.  This should be pretty similar to the workflow
for OE-Core -> Poky right?

> 
> At this point, the build CI would run it's normal operations and code review would take place.
> Following a +2 and submit, Jenkins would:
> 
> 1. cd openbmc-openbmc
> 2. git pull
> 3. git subtree pull --prefix=path/to/subtree --squash <remote> master #For all given subtrees

I think I read somewhere that Poky has another verification and approval
step here, before merging OE-Core/bitbake patches into Poky.  Do we want
to be like Poky and require testing and/or maintainer approval here?

> 
> However at this point, I end up with two commits in the parent repo, one with the squashed changes, and a merge commit.
> I don't know how to do this operation without ending up with a merge commit, do you have any advice here?

To avoid the merge you can skip the subtree pull (which does a merge) and
instead generate a patch:

git cherry-pick —strategy=subtree -Xsubtree=path/to/subtree <squash-commit>

> 
> I could be totally overthinking the whole strategy,

I don’t think so.  Its par for the course I think for an OE based distribution.

> so any advice and direction is much appreciated!
> Along those same lines, is subtree still the correct tool?

I think so.  I had a look at Combo-layer awhile back…it seems to do the
same thing as git cherry-pick, that is, generate patches and apply them
to the parent repository.  It does layer some features on top of that
but I haven’t missed those yet.  They are similar enough I feel we could
switch back and forth if need be.  I’m guessing Combo-layer was written
before subtrees had the support they do today in Git.

> I hear repo works for a lot of projects, Yocto uses https://wiki.yoctoproject.org/wiki/Combo-layer.
> 
> Thanks,
> -Dave

Thanks for kicking off this conversation!

-brad


More information about the openbmc mailing list