From: Jeff Hostetler Date: Fri, 19 May 2017 12:25:05 GMT Subject: Re: [WIP/RFC 00/23] repository object Message-ID: <623e5473-9fb0-07e4-0ac1-adabdc652c74@jeffhostetler.com> In-Reply-To: <20170518232134.163059-1-bmwill@google.com> On 5/18/2017 7:21 PM, Brandon Williams wrote: > When I first started working on the git project I found it very difficult to > understand parts of the code base because of the inherently global nature of > our code. It also made working on submodules very difficult. Since we can > only open up a single repository per process, you need to launch a child > process in order to process a submodule. But you also need to be able to > communicate other stateful information to the children processes so that the > submodules know how best to format their output or match against a > pathspec...it ends up feeling like layering on hack after hack. What I would > really like to do, is to have the ability to have a repository object so that I > can open a submodule in-process. > > Before this becomes a reality for all commands, much of the library code would > need to be refactored in order to work purely on handles instead of global > state. As it turned out, ls-files is a pretty simple command and doesn't have > *too* many dependencies. The biggest thing that needed to be changed was > piping through an index into a couple library routines so that they don't > inherently rely on 'the_index'. A few of these changes I've sent out and can > be found at 'origin/bw/pathspec-sans-the-index' and > 'origin/bw/dir-c-stops-relying-on-the-index' which this series is based on. > > Patches 1-16 are refactorings to prepare either library code or ls-files itself > to be ready to handle passing around an index struct. Patches 17-22 introduce > a repository struct and change a couple of things about how submodule caches > work (getting submodule information from .gitmodules). And Patch 23 converts > ls-files to use a repository struct. > > The most interesting part of the series is from 17-23. And 1-16 could be taken > as is without the rest of the series. > > This is still very much in a WIP state, though it does pass all tests. What > I'm hoping for here is to get a discussion started about the feasibility of a > change like this and hopefully to get the ball rolling. Is this a direction we > want to move in? Is it worth the pain? > > Thanks for taking the time to look at this and entertain my insane ideas :) Very nice and thanks for starting this. Jeff