Re: git complains packed-refs is not a directory when used with GIT_DIR and GIT_WORK_TREE envvars.
- From
Jeff King <peff@peff.net>
- Date
- Mar 28, 2018, 09:52 UTC
- Message-ID
- <20180328095203.GB1523@sigill.intra.peff.net>
- In-Reply-To
- <20180327173024.GA5017@duynguyen.home>
On Tue, Mar 27, 2018 at 07:30:24PM +0200, Duy Nguyen wrote:
Show 9 quoted lines
> On Tue, Mar 27, 2018 at 07:09:36PM +0200, Duy Nguyen wrote: > > I would rather have something like ref_store_reinit() in the same > > spirit as the second call of set_git_dir() in setup_work_tree. It is > > hacky, but it works and keeps changes to minimal (so that it could be > > easily replaced later). > > So in the name of hacky and dirty things, it would look something like > this. This passed your test case. The test suite is still running > (slow laptop) but I don't expect breakages there.
I think this is the right direction. I mentioned in my last reply that it would be nice for this to be a bit more generic, in case we need to use it again (and also just to keep the module boundaries sane).
This part confused me at first:
Show 9 quoted lines
> +void make_main_ref_store_use_absolute_paths(void)
> +{
> + files_force_absolute_paths(get_main_ref_store());
> +}
> +
> +void make_main_ref_store_use_relative_paths(const char *cwd)
> +{
> + files_make_relative_paths(get_main_ref_store(), cwd);
> +}since I thought you were actually turning things into absolute paths. But your procedure is basically "turn absolute, then after chdir, turn them back relative".
I think it might be clearer if a single call is given both the old and new paths. That requires the caller of chdir() storing getcwd() before it moves, but I don't think that should be a big deal.
-Peff