Mehdi Amini via llvm-dev
2016-Jul-29 18:17 UTC
[llvm-dev] [RFC] One or many git repositories?
> On Jul 29, 2016, at 11:07 AM, Robinson, Paul <paul.robinson at sony.com> wrote: > > > >> -----Original Message----- >> From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org <mailto:llvm-dev-bounces at lists.llvm.org>] On Behalf Of Mehdi >> Amini via llvm-dev >> Sent: Friday, July 29, 2016 10:02 AM >> To: David Chisnall >> Cc: llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>; Bruce Hoult >> Subject: Re: [llvm-dev] [RFC] One or many git repositories? >> >> >>> On Jul 29, 2016, at 2:19 AM, David Chisnall >> <david.chisnall at cl.cam.ac.uk> wrote: >>> >>> On 29 Jul 2016, at 05:11, Mehdi Amini via llvm-dev <llvm- >> dev at lists.llvm.org> wrote: >>>> >>>> What I meant by “different problem" is that “downstream users” for >> instance don’t need to commit, that makes their problem/workflow quite >> different from an upstream developer (for instance it is fairly easy to >> maintain a read-only view of the existing individual git repo currently on >> llvm.org). >>> >>> I’m not convinced by this distinction. A lot of downstream developers >> need to patch LLVM and we benefit when they upstream their changes. >> >> I made a difference between downstream users and developers. I.e. someone >> that just need to get and build compiler-rt vs someone that want to >> *commit* to LLVM. Note that even by getting a single repo you can still >> send a patch to the mailing list and someone can commit it for you >> (including correct author attribution contrary to SVN). >> >>> We should not make it harder for them to do this. To give a couple of >> example downstream projects, both FreeBSD and Swift have patches on LLVM / >> Clang in their versions that they gradually filter upstream. Both >> projects have LLVM committers among their members. If the workflow that >> we recommend for them makes upstreaming easy then they benefit >> (maintaining a fork is effort) and LLVM benefits (having people provide >> bug fixes makes our code better). >>> >>> The workflow that we want to recommend to these people is: >>> >>> - Fork the repo that you’re interested in from the LLVM GitHub >> organisation >>> - Make your changes >>> - Send pull requests for anything that you think is of interest to >> upstream >> >> >> Note that the workflow you describe above still requires to export their >> patch and import it in this clone before pushing. >> (Note also that we accept patches on the mailing list, so one does not >> even need to clone the official repo). >> >>> This makes the barrier to entry for sending code back upstream *much* >> lower than it currently is, >> >> I don’t understand this statement. As of today you can send a diff to the >> mailing list, I don’t see how lower the bar can be. >> >> >>> to the benefit of all. If the alternative is: >>> >>> - Fork a read-only repo that you’re interested in from the LLVM GitHub >> organisation >>> - Make your changes >> >> Why? If you know you want to *push* commits upstream, fork the only useful >> repo for that in the first place. >> >>> - Fork a different repo from the LLVM GitHub organisation >>> - Run a script to filter some of your changes into that one >> >> I don’t know why you think there is a need for a script, or why it is >> different from today. >> Let say I’m working on a fork of the compiler-rt read-only repo and I want >> to upstream a patch at some point: >> >> Today: >> >> - cd /path/to/compiler_rt-forked >> - git format-patch … >> - cd /path/to/compiler_rt-upstream >> - git am /path/to/compiler_rt-forked/0001-My-awesome-changes.patch >> - git svn dcommit >> - done >> >> Tomorrow with a monorepo: >> >> - cd /path/to/compiler_rt-forked >> - git format-patch … >> - cd /path/to/unifiedrepo-upstream >> - git am /path/to/compiler_rt-forked/0001-My-awesome-changes.patch — >> directory=compiler-rt >> - git push >> - done >> >> Alternatively, if I’m upstream a patch once a year, I don’t really need to >> push it myself. >> >> - cd /path/to/compiler_rt-forked >> - git format-patch … >> - email the patch. >> >> >>> - Send a pull request from that >> >> Note that I think we deferred any change to the workflow for future >> discussions (pull-request are not part of our workflow today). >> >>> - Deal with merging between the two yourself >> >> I don’t know what you mean by dealing with the merging, I don’t expect any >> difficulties, you need to elaborate. > > Almost no upstream patch survives contact with the reviewers unscathed > (and quite often it doesn't look exactly like your local patch anyway, > for reasons ranging from expediency to local coding standards). > Therefore the patch that you merge back in to your local repo from > upstream differs from the one you already have locally. If you are *very* > lucky, the differences can be handled with accept-theirs; in my experience > this is not normal, and in many cases you need to manually revert your > original local patch before merging the patch as received from upstream. > That's what "dealing with merging" means. I invite you to review > "Living Downstream Without Drowning" if you still don't understand;Don’t worry, I’m living downstream, and perfectly aware of the situation. (And I was in the room at the dev meeting).> it describes a number of tactics we've developed over the years to > try to simplify the dealing-with-merging problem. > > I had two entire dev-meeting sessions full of people who seemed to be > having this problem. Maybe you don't; if so, you're lucky, but it > doesn't mean the problem fails to exist.The “problem” exists, it exists today, and it will tomorrow whatever solution we go with (monorepo or split ones). What I don’t see you addressing here is why this should be more of a problem in the monorepo case (as it was implied in the email I was answering to). — Mehdi> --paulr > >> >>> >>> I strongly suspect that we’ll get a lot fewer useful contributions from >> downstream. Or downstream people will just work on the monorepo and eat >> the cost. >>> >>> If someone is working on a downstream LLVM project and becoming familiar >> with our codebase, then we want them to be subtly nudging their workflow >> so that they eventually become LLVM contributors without noticing! >> >> Sure. The distinction between “downstream users” and “developers” was made >> in response to “there exists many user that just download and build a >> subproject”. These are not people that are *developing* on a downstream >> fork. >> >> — >> Mehdi >> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160729/5cb08a66/attachment.html>
Robinson, Paul via llvm-dev
2016-Jul-29 18:50 UTC
[llvm-dev] [RFC] One or many git repositories?
I don’t know what you mean by dealing with the merging, I don’t expect any difficulties, you need to elaborate. What I don’t see you addressing here is why this should be more of a problem in the monorepo case (as it was implied in the email I was answering to). Your answer made it sound like you thought the monorepo would solve all downstream problems ("I don't know what you mean… I don't expect any difficulties"), which it clearly does not. Sorry for the misunderstanding. --paulr From: mehdi.amini at apple.com [mailto:mehdi.amini at apple.com] Sent: Friday, July 29, 2016 11:17 AM To: Robinson, Paul Cc: David Chisnall; Bruce Hoult; llvm-dev at lists.llvm.org Subject: Re: [llvm-dev] [RFC] One or many git repositories? On Jul 29, 2016, at 11:07 AM, Robinson, Paul <paul.robinson at sony.com<mailto:paul.robinson at sony.com>> wrote: -----Original Message----- From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Mehdi Amini via llvm-dev Sent: Friday, July 29, 2016 10:02 AM To: David Chisnall Cc: llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>; Bruce Hoult Subject: Re: [llvm-dev] [RFC] One or many git repositories? On Jul 29, 2016, at 2:19 AM, David Chisnall <david.chisnall at cl.cam.ac.uk<mailto:david.chisnall at cl.cam.ac.uk>> wrote: On 29 Jul 2016, at 05:11, Mehdi Amini via llvm-dev <llvm- dev at lists.llvm.org<mailto:dev at lists.llvm.org>> wrote: What I meant by “different problem" is that “downstream users” for instance don’t need to commit, that makes their problem/workflow quite different from an upstream developer (for instance it is fairly easy to maintain a read-only view of the existing individual git repo currently on llvm.org<http://llvm.org>). I’m not convinced by this distinction. A lot of downstream developers need to patch LLVM and we benefit when they upstream their changes. I made a difference between downstream users and developers. I.e. someone that just need to get and build compiler-rt vs someone that want to *commit* to LLVM. Note that even by getting a single repo you can still send a patch to the mailing list and someone can commit it for you (including correct author attribution contrary to SVN). We should not make it harder for them to do this. To give a couple of example downstream projects, both FreeBSD and Swift have patches on LLVM / Clang in their versions that they gradually filter upstream. Both projects have LLVM committers among their members. If the workflow that we recommend for them makes upstreaming easy then they benefit (maintaining a fork is effort) and LLVM benefits (having people provide bug fixes makes our code better). The workflow that we want to recommend to these people is: - Fork the repo that you’re interested in from the LLVM GitHub organisation - Make your changes - Send pull requests for anything that you think is of interest to upstream Note that the workflow you describe above still requires to export their patch and import it in this clone before pushing. (Note also that we accept patches on the mailing list, so one does not even need to clone the official repo). This makes the barrier to entry for sending code back upstream *much* lower than it currently is, I don’t understand this statement. As of today you can send a diff to the mailing list, I don’t see how lower the bar can be. to the benefit of all. If the alternative is: - Fork a read-only repo that you’re interested in from the LLVM GitHub organisation - Make your changes Why? If you know you want to *push* commits upstream, fork the only useful repo for that in the first place. - Fork a different repo from the LLVM GitHub organisation - Run a script to filter some of your changes into that one I don’t know why you think there is a need for a script, or why it is different from today. Let say I’m working on a fork of the compiler-rt read-only repo and I want to upstream a patch at some point: Today: - cd /path/to/compiler_rt-forked - git format-patch … - cd /path/to/compiler_rt-upstream - git am /path/to/compiler_rt-forked/0001-My-awesome-changes.patch - git svn dcommit - done Tomorrow with a monorepo: - cd /path/to/compiler_rt-forked - git format-patch … - cd /path/to/unifiedrepo-upstream - git am /path/to/compiler_rt-forked/0001-My-awesome-changes.patch — directory=compiler-rt - git push - done Alternatively, if I’m upstream a patch once a year, I don’t really need to push it myself. - cd /path/to/compiler_rt-forked - git format-patch … - email the patch. - Send a pull request from that Note that I think we deferred any change to the workflow for future discussions (pull-request are not part of our workflow today). - Deal with merging between the two yourself I don’t know what you mean by dealing with the merging, I don’t expect any difficulties, you need to elaborate. Almost no upstream patch survives contact with the reviewers unscathed (and quite often it doesn't look exactly like your local patch anyway, for reasons ranging from expediency to local coding standards). Therefore the patch that you merge back in to your local repo from upstream differs from the one you already have locally. If you are *very* lucky, the differences can be handled with accept-theirs; in my experience this is not normal, and in many cases you need to manually revert your original local patch before merging the patch as received from upstream. That's what "dealing with merging" means. I invite you to review "Living Downstream Without Drowning" if you still don't understand; Don’t worry, I’m living downstream, and perfectly aware of the situation. (And I was in the room at the dev meeting). it describes a number of tactics we've developed over the years to try to simplify the dealing-with-merging problem. I had two entire dev-meeting sessions full of people who seemed to be having this problem. Maybe you don't; if so, you're lucky, but it doesn't mean the problem fails to exist. The “problem” exists, it exists today, and it will tomorrow whatever solution we go with (monorepo or split ones). What I don’t see you addressing here is why this should be more of a problem in the monorepo case (as it was implied in the email I was answering to). — Mehdi --paulr I strongly suspect that we’ll get a lot fewer useful contributions from downstream. Or downstream people will just work on the monorepo and eat the cost. If someone is working on a downstream LLVM project and becoming familiar with our codebase, then we want them to be subtly nudging their workflow so that they eventually become LLVM contributors without noticing! Sure. The distinction between “downstream users” and “developers” was made in response to “there exists many user that just download and build a subproject”. These are not people that are *developing* on a downstream fork. — Mehdi _______________________________________________ LLVM Developers mailing list llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160729/5008ab4f/attachment-0001.html>
Mehdi Amini via llvm-dev
2016-Jul-29 18:51 UTC
[llvm-dev] [RFC] One or many git repositories?
> On Jul 29, 2016, at 11:50 AM, Robinson, Paul <paul.robinson at sony.com> wrote: > > I don’t know what you mean by dealing with the merging, I don’t expect any > difficulties, you need to elaborate. > > What I don’t see you addressing here is why this should be more of a problem in the monorepo case (as it was implied in the email I was answering to). > > Your answer made it sound like you thought the monorepo would solve all downstream problems ("I don't know what you mean… I don't expect any difficulties"), which it clearly does not. Sorry for the misunderstanding.My bad, I wrongly expressed myself, I should have written “I don’t expect any *extra* difficulties over what we have now or what we'd have with submodules”. — Mehdi> --paulr > <> > From: mehdi.amini at apple.com [mailto:mehdi.amini at apple.com] > Sent: Friday, July 29, 2016 11:17 AM > To: Robinson, Paul > Cc: David Chisnall; Bruce Hoult; llvm-dev at lists.llvm.org > Subject: Re: [llvm-dev] [RFC] One or many git repositories? > > > On Jul 29, 2016, at 11:07 AM, Robinson, Paul <paul.robinson at sony.com <mailto:paul.robinson at sony.com>> wrote: > > > > > -----Original Message----- > From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org <mailto:llvm-dev-bounces at lists.llvm.org>] On Behalf Of Mehdi > Amini via llvm-dev > Sent: Friday, July 29, 2016 10:02 AM > To: David Chisnall > Cc: llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>; Bruce Hoult > Subject: Re: [llvm-dev] [RFC] One or many git repositories? > > > > On Jul 29, 2016, at 2:19 AM, David Chisnall > <david.chisnall at cl.cam.ac.uk <mailto:david.chisnall at cl.cam.ac.uk>> wrote: > > > On 29 Jul 2016, at 05:11, Mehdi Amini via llvm-dev <llvm- > dev at lists.llvm.org <mailto:dev at lists.llvm.org>> wrote: > > > What I meant by “different problem" is that “downstream users” for > instance don’t need to commit, that makes their problem/workflow quite > different from an upstream developer (for instance it is fairly easy to > maintain a read-only view of the existing individual git repo currently on > llvm.org <http://llvm.org/>). > > > I’m not convinced by this distinction. A lot of downstream developers > need to patch LLVM and we benefit when they upstream their changes. > > I made a difference between downstream users and developers. I.e. someone > that just need to get and build compiler-rt vs someone that want to > *commit* to LLVM. Note that even by getting a single repo you can still > send a patch to the mailing list and someone can commit it for you > (including correct author attribution contrary to SVN). > > > We should not make it harder for them to do this. To give a couple of > example downstream projects, both FreeBSD and Swift have patches on LLVM / > Clang in their versions that they gradually filter upstream. Both > projects have LLVM committers among their members. If the workflow that > we recommend for them makes upstreaming easy then they benefit > (maintaining a fork is effort) and LLVM benefits (having people provide > bug fixes makes our code better). > > > The workflow that we want to recommend to these people is: > > - Fork the repo that you’re interested in from the LLVM GitHub > organisation > > - Make your changes > - Send pull requests for anything that you think is of interest to > upstream > > > Note that the workflow you describe above still requires to export their > patch and import it in this clone before pushing. > (Note also that we accept patches on the mailing list, so one does not > even need to clone the official repo). > > > This makes the barrier to entry for sending code back upstream *much* > lower than it currently is, > > I don’t understand this statement. As of today you can send a diff to the > mailing list, I don’t see how lower the bar can be. > > > > to the benefit of all. If the alternative is: > > - Fork a read-only repo that you’re interested in from the LLVM GitHub > organisation > > - Make your changes > > Why? If you know you want to *push* commits upstream, fork the only useful > repo for that in the first place. > > > - Fork a different repo from the LLVM GitHub organisation > - Run a script to filter some of your changes into that one > > I don’t know why you think there is a need for a script, or why it is > different from today. > Let say I’m working on a fork of the compiler-rt read-only repo and I want > to upstream a patch at some point: > > Today: > > - cd /path/to/compiler_rt-forked > - git format-patch … > - cd /path/to/compiler_rt-upstream > - git am /path/to/compiler_rt-forked/0001-My-awesome-changes.patch > - git svn dcommit > - done > > Tomorrow with a monorepo: > > - cd /path/to/compiler_rt-forked > - git format-patch … > - cd /path/to/unifiedrepo-upstream > - git am /path/to/compiler_rt-forked/0001-My-awesome-changes.patch — > directory=compiler-rt > - git push > - done > > Alternatively, if I’m upstream a patch once a year, I don’t really need to > push it myself. > > - cd /path/to/compiler_rt-forked > - git format-patch … > - email the patch. > > > > - Send a pull request from that > > Note that I think we deferred any change to the workflow for future > discussions (pull-request are not part of our workflow today). > > > - Deal with merging between the two yourself > > I don’t know what you mean by dealing with the merging, I don’t expect any > difficulties, you need to elaborate. > > Almost no upstream patch survives contact with the reviewers unscathed > (and quite often it doesn't look exactly like your local patch anyway, > for reasons ranging from expediency to local coding standards). > Therefore the patch that you merge back in to your local repo from > upstream differs from the one you already have locally. If you are *very* > lucky, the differences can be handled with accept-theirs; in my experience > this is not normal, and in many cases you need to manually revert your > original local patch before merging the patch as received from upstream. > That's what "dealing with merging" means. I invite you to review > "Living Downstream Without Drowning" if you still don't understand; > > Don’t worry, I’m living downstream, and perfectly aware of the situation. > (And I was in the room at the dev meeting). > > > > it describes a number of tactics we've developed over the years to > try to simplify the dealing-with-merging problem. > > I had two entire dev-meeting sessions full of people who seemed to be > having this problem. Maybe you don't; if so, you're lucky, but it > doesn't mean the problem fails to exist. > > The “problem” exists, it exists today, and it will tomorrow whatever solution we go with (monorepo or split ones). > > What I don’t see you addressing here is why this should be more of a problem in the monorepo case (as it was implied in the email I was answering to). > > — > Mehdi > > > > --paulr > > > > > > I strongly suspect that we’ll get a lot fewer useful contributions from > downstream. Or downstream people will just work on the monorepo and eat > the cost. > > > If someone is working on a downstream LLVM project and becoming familiar > with our codebase, then we want them to be subtly nudging their workflow > so that they eventually become LLVM contributors without noticing! > > Sure. The distinction between “downstream users” and “developers” was made > in response to “there exists many user that just download and build a > subproject”. These are not people that are *developing* on a downstream > fork. > > — > Mehdi > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160729/ad52dc8b/attachment.html>