<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, Jul 20, 2016 at 5:36 PM Justin Bogner <<a href="mailto:mail@justinbogner.com">mail@justinbogner.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Chandler Carruth <<a href="mailto:chandlerc@google.com" target="_blank">chandlerc@google.com</a>> writes:<br>
> On Wed, Jul 20, 2016 at 5:02 PM Justin Bogner via llvm-dev <<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
><br>
>> Justin Lebar via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> writes:<br>
>> > I would like to (re-)open a discussion on the following specific<br>
>> question:<br>
>> ><br>
>> >   Assuming we are moving the llvm project to git, should we<br>
>> >   a) use multiple git repositories, linked together as subrepositories<br>
>> > of an umbrella repo, or<br>
>> >   b) use a single git repository for most llvm subprojects.<br>
>> ><br>
>> > The current proposal assembled by Renato follows option (a), but I<br>
>> > think option (b) will be significantly simpler and more effective.<br>
>> > Moreover, I think the issues raised with option (b) are either<br>
>> > incorrect or can be reasonably addressed.<br>
>> ><br>
>> > Specifically, my proposal is that all LLVM subprojects that are<br>
>> > "version-locked" (and/or use the common CMake build system) live in a<br>
>> > single git repository.  That probably means all of the main llvm<br>
>> > subprojects other than the test-suite and maybe libc++.  From looking<br>
>> > at the repository today that would be: llvm, clang, clang-tools-extra,<br>
>> > lld, polly, lldb, llgo, compiler-rt, openmp, and parallel-libs.<br>
>><br>
>> FWIW, I'm opposed. I'm not convinced that the problems with multiple<br>
>> repos are any worse than the problems with a single repo, which makes<br>
>> this more or less just change for the sake of change, IMO.<br>
>><br>
><br>
> It would be useful to know what problems you see with a single repo that<br>
> are more significant. In particular, either why you think the problems<br>
> jlebar already mentioned are worse than he sees them, or what other<br>
> problems are that he hasn't addressed.<br>
<br>
Running the same 'git checkout' commands on multiple repos has always<br>
been sufficient to manage the multiple repos so far - as long as you<br>
create the same branches and tags in each repo, it's easy[1] to manage<br>
the set of repos with a script that cd's to each one and runs whatever<br>
git command.<br></blockquote><div><br></div><div>A notable difference is the ability to do API updates across them or the ability to bisect across them.</div><div><br></div><div>Also, if the infrastructure that keeps the umbrella repo in sync falls over or has a serious problem, reconstructing version-locked state in order to bisect across those regions of time seems quite challenging. So IMO, it isn't a minor inconvenience, even if it is something we could overcome.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">So it's a pretty minor inconvenience today to have the multiple repos in<br>
the case where you want to check out all of them.<br>
<br>
OTOH, if all of the repos are combined into one, you have to do work<br>
when you only want some of them. In my experience, this is basically<br>
always - between my various machines and projects I have a several<br>
checkouts of llvm+compiler-rt+clang+libc++, and I have a lot of<br>
checkouts of just llvm. I've only checked out the other repos when I was<br>
changing APIs and needed to update them.<br>
<br>
I haven't tried the options jlebar has described to deal with these -<br>
sparse checkouts and whatnot, but they seem like an equivalent amount of<br>
work/learning curve as writing a script that cd's to several directories<br>
and runs the same git command in each.<br></blockquote><div><br></div><div>I actually would like to see an example of how you would checkout a common subset with the sparse checkout feature. jlebar, could you give us demo commands for this?</div><div><br></div><div>In particular, I've had a lot of folks come up and ask me for my script to walk all the directories and run the appropriate git commands in them, and if it is easier to have the GettingStarted page document how to use the sparse checkout thing, that would be nice.</div></div></div>