> -----Original Message-----
> From: Laszlo Ersek [mailto:ler...@redhat.com]
> Sent: Thursday, March 10, 2016 2:03 AM
> To: Kinney, Michael D <michael.d.kin...@intel.com>; Justen, Jordan L
> <jordan.l.jus...@intel.com>; Mangefeste, Tony <tony.mangefe...@intel.com>; 
> edk2-
> de...@lists.01.org <edk2-de...@ml01.01.org>
> Subject: Re: [edk2] EDK2 Staging Repository
> 
> On 03/10/16 00:02, Kinney, Michael D wrote:
> > Jordan,
> >
> > Responses included below.
> >
> > Mike
> >
> >
> >
> >> -----Original Message-----
> >> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of 
> >> Jordan Justen
> >> Sent: Wednesday, March 9, 2016 1:47 PM
> >> To: Mangefeste, Tony <tony.mangefe...@intel.com>; edk2-devel@lists.01.org
> >> Subject: Re: [edk2] EDK2 Staging Repository
> >>
> >> On 2016-03-09 10:53:38, Mangefeste, Tony wrote:
> >>> Below are the details of the proposal for a staging branch, please review 
> >>> and
> >> comment.
> >>>
> >>> <proposal>
> >>>
> >>> Problem statement
> >>> =================
> >>> Need place on tianocore.org where new features that are not ready for 
> >>> product
> >>> integration can be checked in for evaluation by the EDK II community 
> >>> prior to
> >>> adding to the edk2 trunk.  This serves several purposes:
> >>>
> >>> * Encourage source code to be shared earlier in the development process
> >>> * Allow source code to be shared that does not yet meet all edk2 required 
> >>> quality
> >> criteria
> >>> * Allow source code to be shared so the EDK II community can help finish 
> >>> and
> validate
> >> new features
> >>> * Provide a location to hold new features until they are deemed ready for 
> >>> product
> >> integration
> >>> * Provide a location to hold new features until there is a natural point 
> >>> in edk2
> >> release cycle to fully validate the new feature.
> >>> * Not intended to be used for bug fixes.
> >>> * Not intended to be used for small, simple, or low risk features.
> >>>
> >>
> >> I think the parts about making a central place for big feature
> >> branches seems good. I think Laszlo might have appreciated having a
> >> well defined central location for his OVMF SMM enabling branch.
> >>
> >> I think the processes around allowing the code to be merged seems too
> >> heavyweight. In the cases of big patchsets, it can be burdensome
> >> enough just to get code review. To insert another process step (and
> >> set of approvers) to actually merge the feature seems perhaps
> >> unneccesary.
> >>
> >>> Proposal
> >>> ========
> >>> 1) Create a new repo called edk2-staging
> >>>         a) edk2-staging is a fork of edk
> >>>         b) edk2-staging/master tracks edk2/master
> >>>
> >>
> >> For branches maintained by package maintainers, could we have them
> >> under the edk2 repo and named staging/*?
> >
> > Do you mean a directory in the edk2 repo called staging?  I did think about 
> > this
> option,
> > but I am concerned about code that is not ready for product integration 
> > being in the
> edk2
> > repo and I am also concerned about the size of the edk2 repo.  Creating a 
> > new repo
> that is
> > a fork of edk2 addressed both of those issues.
> 
> I disagree.
> 
> I have now re-read our private discussion from last year, when we were
> working on SMM (the core infrastructure and the OVMF platform enablement
> in parallel). The message ID of the root of the sub-thread is
> <564f50b9.6040...@redhat.com>, if someone on CC at that time would like
> to re-read it now.
> 
> At that time, the consensus seemed to be to create a top-level Staging/
> directory, with packages under it (with their DEC files and modules).
> So, we would have:
> 
> ArmVirtPkg/...
> EmulatorPkg/...
> OvmfPkg/...
> Staging/ArmVirtPkg/...
> Staging/EmulatorPkg/...
> Staging/OvmfPkg/...
> 
> This matches how Linux works, and the naming makes it very clear that
> modules (drivers, applications, library instances) under Staging are
> work in progress. It is not possible to include a module from under
> Staging as an oversight.
> 
> Keeping work-in-progress modules in a separate repo has a critical
> drawback: those modules will not share the commit history of the main
> edk2 repo.

The issue with a single staging directory in edk2 is that we can not work on
different features that touch the same module/lib.  This is where branching
provides helps.  One purpose of edk2-staging is complex features that touch
several modules, likely across multiple packages.

Maybe there are 2 concepts here.  One is feature branches for active 
Design/dev/test.  Another is content that is functional and stable and 
synced with the edk2 trunk, but has some number of "known" issues.

> 
> Consider the following example: a new release or erratum of the UEFI or
> PI spec is published, and a developer contributes the implementation of
> a new feature (or bugfix) to one of the core packages: MdePkg,
> MdeModulePkg, NetworkPkg, etc. Then a platform developer would like to
> rely on this UEFI or PI change in his or her work-in-progress module. If
> that module lives outside of the main edk2 repo, it will cause a
> dependency nightmare.

I the proposal, step (4e) says the feature branch maintainer needs to 
keep the feature branch synced with the edk2 trunk.  The proposal uses
the term "rebase", but that may not be the right operation to track
changes from edk2 into an edk2-staging branch.  Maybe it is a "merge" 
operation.

Also, for some new features, we may want to use a stable tag from edk2,
so the feature development work can progress without having to track
edk2.  Then as the feature matures and preparation for commit back to 
edk2 begins, sync with edk2 is required.

> 
> Proprietary downstreams of edk2 already manage this, but let that remain
> only their problem.
> 
> For OvmfPkg and ArmVirtPkg minimally, a Staging/ directory only makes
> sense to me if it lives in the main edk2 repository, and shares its
> commit history. Staging/ doesn't stand for separate product, separate
> maintainership, separate life cycle, etc -- the sole difference with
> staging modules is that we publicly admit, "yeah these are not fully
> polished yet". There's no other difference.
> 
> Size-wise, the edk2 repo is easily manageable. Here's a comparison
> between up-to-date & clean checkouts of projects I work with (note that
> the below doesn't include the .git subdirectory):
> 
> $ du -s -h --apparent-size --exclude=.git \
>       edk2 qemu libvirt-upstream kernel \
>   | sort -h
> 69M     qemu
> 147M    libvirt-upstream
> 202M    edk2
> 845M    kernel
> 
> The .git subdirectory isn't large either:
> 
> $ du -s -h --apparent-size \
>       {edk2,qemu,libvirt-upstream,kernel}/.git \
>   | sort -h
> 174M    edk2/.git
> 342M    qemu/.git
> 692M    libvirt-upstream/.git
> 1.3G    kernel/.git
> 
> If Staging/ lived in a separate repository, it would not help me, and I
> couldn't use it. It might still serve the needs of others, of course.

I agree that not every development task should use a feature branch.  We 
need clear criteria for using feature branches.  Please feel free to 
provide additional guidelines on when you think a feature branch is 
required or not required.

> 
> Thank you
> Laszlo
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to