Managing openbmc with subtree

Dave Cobbley david.j.cobbley at linux.intel.com
Sat Jul 21 03:42:55 AEST 2018


The closest paradigm I can figure is this:

               +---------+                   | +-------------+
               |   Dev   |                   |               | Jenkins   |
               +---------+                   | +-------------+
+--------------------------------------------------------------------------------------------------------------+
    1. Modify subtree                        |
    2. git add/commit                        |
    3. git push gerrit HEAD:refs/for/master  |
                                             |   Once +2 is given
                                             |   4. git subtree pull 
--prefix=path/to/subtree <subtree> master
                                             |   5. git checkout <ref>
                                             |   6. git reset --soft ~1
                                             |   7. git commit <with 
message from original author>
                                             |   8. git add/commit
                                             |   9. git push
    10. git pull --rebase                    |
                                             |
                                             |
                                             |
                                             +

It seems wrong to do a reset --soft. Git must have a better way of doing 
this with subtrees.

Thanks,
-Dave


On 07/19/2018 01:08 PM, Dave Cobbley 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/
>
>
> 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
>
> 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
>
> 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?
>
> I could be totally overthinking the whole strategy, so any advice and 
> direction is much appreciated!
> Along those same lines, is subtree still the correct tool? I hear repo 
> works for a lot of projects, Yocto uses 
> https://wiki.yoctoproject.org/wiki/Combo-layer.
>
> Thanks,
> -Dave


More information about the openbmc mailing list