From: Elijah Newren Date: Sat, 28 Feb 2009 21:20:32 GMT Subject: Re: [PATCH] Ensure proper setup of git_dir for git-hash-object Message-ID: <51419b2c0902281320neec7960vfbe7b806c8db56ca@mail.gmail.com> In-Reply-To: <7v3adyffax.fsf@gitster.siamese.dyndns.org> On Sat, Feb 28, 2009 at 1:59 PM, Junio C Hamano wrote: > newren@gmail.com writes: > >> Without this patch: >> $ mkdir tmp >> $ cd tmp/ >> $ git init --bare >> Initialized empty Git repository in /home/newren/floss-development/git/tmp/ >> $ echo hi | git hash-object -w --stdin >> error: unable to create temporary sha1 filename .git/objects/45: No such file or directory >> >> fatal: Unable to add stdin to database >> $ echo hi | git --git-dir=. hash-object -w --stdin >> 45b983be36b73c0788dc9cbcb76cbb80fc7bb057 > > Does the patched version work without -w option?  Should it? Yes, the patched version works with or without the -w option (at least in my testing -- maybe you know of a case I'm missing?) I would certainly expect it to work in both cases. I basically arrived at the patch by realizing that git_config was setting git_dir incorrectly as a side-effect, causing setup_git_directory to notice it was already set and not try any of it's more detailed logic to figure out the correct value. Then I did some grepping and noticed that other source files (archive.c, builtin-apply.c, builtin-diff, etc., etc.) call setup_git_directory[_gently] before git_config, and that hash-object.c seemed to be the only one that didn't follow that trend.