> On Nov 1, 2020, at 10:30 AM, Satish Balay <[email protected]> wrote:
> 
> Just a note: subtree workflow is currently broken with petsc4py
> 
> We've imported petsc4py using subtree - but now we are unable to export back 
> changes in petsc repo to the standalone petsc4py repo due to git subtree 
> errors.
> 
> I spent some time on workarounds - but didn't go anywhere.
> 
> [likely this is a non-issue with this examples repo workflow - as there is no 
> direct push back to upstream repo]
> 
> And with subtree - not all developers need to know about it. Only the person 
> who is syncing the 2 repos.. [if they know how to sync/resolve conflicts]

  Since each person is reponsable for their branch getting merged, doesn't this 
mean anyone who changes something in PETSc that requires a change in p4pdes has 
to fix it via gittree process ( that is have have to sync the 2 repose?) and 
hence now how to sync 2 repos via gittree. 

  Until I see the entire gittree workflow I will not understand.

  Barry

> 
> Satish
> 
> On Sun, 1 Nov 2020, Jed Brown wrote:
> 
>> Barry Smith <[email protected]> writes:
>> 
>>>>> git subtree does require use of new commands every time you mess with it 
>>>>> (say every three months) that we do not know and since each of 
>>>>> us will do this infrequently it is likely we will not remember them (I 
>>>>> won't)  while my approach does not require remembering new commands. 
>>>>> My approach only requires branching, push, and pulling on the fork and 
>>>>> updating EdsRepo.py which is things all the developers know about and 
>>>>> do regularly since we update other external packages.
>>> 
>>>>> Circular dependencies (PETSc CI depends on Ed's p4pdes depends on PETSc) 
>>>>> are significantly more labor-intensive and it would need to be done on 
>>>>> each change, versus once per release cycle.
>>> 
>>>    I think we are not communicating on exactly the  same wave length. 
>>> 
>>>    I am not advocating we test on Ed's I am advocating we test on our fork 
>>> of Ed's and how often our fork gets passed to Ed with MR is a choice all of 
>>> us make together, now we could do it once at release time with all the 
>>> fixes we made, every month or each time. Totally up to Ed how often he 
>>> wants to get them, and he is free to ignore them for weeks (up to the next 
>>> release if he likes) since our testing will continue because we use our 
>>> fork. How often we pass them on to Ed is not related to how we maintain our 
>>> CI.
>>> 
>>>    There is no circular dependency on my approach with Ed's p4pdes.
>> 
>> The circular dependency is on our fork of p4pdes.
>> 
>>>    I vote to fix things in our fork or gittree thing continuously since it 
>>> makes it easier to fix things rather than wait to the release when we try 
>>> to find and fix everything and it also helps tell us if we introduced a 
>>> real bug into PETSc and fix PETSc immediately instead of waiting up to 6 
>>> months, just like we now we test immediately with Petsc4py and we should do 
>>> with SLEPc.  How often we give the updates to Ed is a completely different 
>>> issue. 
>>> 
>>>   So again back to my original statement ,it comes down to if the subtree 
>>> or the fork approach is easier for all the PETSc developers who do not 
>>> currently know gittree and would need to learn it with your approach. I 
>>> don't know which is easier learning to use gittree which has its own 
>>> gotcha's or using mine which we all know but may require an extra step (not 
>>> involving Ed, just updating the p4pdes.py commit each time we change 
>>> something in the fork.)
>>> 
>>>  I think using --download-p4pdes on a couple of systems in the CI is 
>>> enough, I don't think we need to put it all CI pipelines (I would like 
>>> slepc in all pipelines).but we could put in all pipelines if we want.
>>> 
>>>  For completeness I show the exact the work flow for my suggestion
>>> 
>>>   pipelines --download-p4pdes and runs its tests
>>>   if it breaks the developer uses --download-p4pdes  on their system 
>>>     they fix the problem either by fixing PETSc or what is downloaded from 
>>> the p4pde fork
>>>        if the fix is in the p4pdes fork they make a branch in the p4pdes 
>>> fork, which they already have since they used --download-p4pdes and thus 
>>>                              have the fork on their system
>>>            they put the fix in new branch in the p4pdes fork and push it
>>>            they edit p4pdes.py and put a new commit in it pointing to their 
>>> branch in the fork
>>>   run the pipeline again
>>>       if fails with p4pdes they do the above again
>>>       else the PETSc branch gets accepted and merged to master
>>>          depending on Ed's choice we make an MR for p4pdes depending on the 
>>> agreed upon cycle. If Ed puts the fix into his master then we just update
>>>               our fork with his latest master with a simple merge of his.  
>>> This will then become the new one we test against. If Ed doesn't respond to 
>>> the MR all is fine we 
>>>              just continue on our fork. If he puts other things in his 
>>> branch but not our MR we just merge that into our fork and so are still 
>>> testing with his latest master.
>> 
>> As you've enumerated here, this requires three MRs per change:
>> 
>>  1. in PETSc with the actual change and to point at a p4pdes commit
>>  2. in p4pdes (Ed's or our fork) to implement needed changes (note: this 
>> can't merge until #1 merges)
>>  3. in PETSc to point at the merge commit of p4pdes (after #2 merges)
>> 
>> With subtree, there is only one MR and it's in the PETSc repository.
>> 
>> Recall that we exchanged hundreds of emails to subtree in BuildSystem long 
>> ago, then quite a lot more to subtree in petsc4py recently, and now we're 
>> doing it again.
>> 
>> The arguments against subtreeing p4pdes are
>> 
>>  1. We want an extra hurdle so developers think twice before changing those 
>> interfaces
>>  2. We want to drive traffic to Ed's repo
>>  3. The repository is so big we don't want every `git clone 
>> gitlab:petsc/petsc` to include it
>> 
>> This repo is small so I'm most sympathetic to #2, but nobody has made these 
>> arguments yet.
>> 
>>>  This happens to be the exact same thing I do now with slepc and any other 
>>> git based package that I use now (except for some I need to make my own 
>>> fork of the external package because we don't have one always available 
>>> eventually likely we will likely put more forks into gitlab/petsc so each 
>>> person doesn't constantly need to make fresh forks of external packages)
>>> 
>>>  If subtree requires fewer steps than this and has no new oddball git 
>>> subtree commands then we should definitely use subtree, if it requires 
>>> other steps involving subtree we need see those commands written in a 
>>> workflow like I have written above and decide if it is still simpler or not.
>>> 
>>>  I am not rejecting subtree, we just need to explicitly see its complete 
>>> work flow and hence the differences to decide, that is what I asking for.
>>> 
>>>  Barry
>>> 
>>>  It seems to me that with subtree we also need to maintain a fork of Ed's 
>>> stuff or else that will have a circular dependency. But perhaps I do not 
>>> understand it.
>> 
>> Such a fork would only be used once per release to submit PRs to Ed.
>> 
> 

Reply via email to