git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 0/9] work-tree clean ups

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Aug 1, 2007, 10:56 UTC
Message-ID
<Pine.LNX.4.64.0708011147500.14781@racer.site>
In-Reply-To
<Pine.LNX.4.64.0708010211071.14781@racer.site>
Hi,
On Wed, 1 Aug 2007, Johannes Schindelin wrote:
Show 25 quoted lines
> On Tue, 31 Jul 2007, Junio C Hamano wrote:
> 
> > Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> > 
> > > There is not really much that can be done about step 6/9: if we are in a 
> > > work tree: that does not mean that we are _not_ in the git_dir.  (And no, 
> > > this does not break git-clean, as a work tree is a work tree is a work 
> > > tree.  If the user was stupid enough to specify the same directory as 
> > > GIT_DIR and GIT_WORK_TREE, then that is _her_ problem.  Git is a powerful 
> > > tool, and you can harm yourself with it.  Tough.)
> > 
> > I think we might have a slight misunderstanding.  The "clean"
> > issue that was raised in an ancient thread was this sequence:
> > 
> > 	$ git init
> >         $ cd .git
> >         $ git clean
> > 
> > It did not involve GIT_DIR (nor GIT_WORK_TREE as it was not even
> > there).
> 
> I very much _did_ mean that case.  When "git clean" is run in ".git/", it 
> should not say that it is in the working tree.  But I guess that my patch 
> series is not really looking out for that;  I'll make that an add-on 
> patch.  (But that _will_ have to wait until tomorrow afternoon.)
I should not have answered so early.

In setup.c, I put in a comment that explains clearly where (in the absence of GIT_DIR) setup_git_directory_gently() looks for the git directory:

        /*
         * Test in the following order (relative to the cwd):
         * - .git/
         * - ./ (bare)
         * - ../.git/
         * - ../ (bare)
         * - ../../.git/
         *   etc.
         */
At least I hope that this explanation is clear.
So what happens in this case:
	$ git init
	$ cd .git
	$ git clean

In setup_git_directory_gently(), it is tested first if there is a subdirectory .git/. No, none. Then it is tested if "." is a git directory. Yes! So, work_tree is set to NULL tentatively (to be overridden by either core.worktree or GIT_WORK_TREE), and it is assumed to be bare (also subject to overriding). So all is well!

You might have noticed that I left out --work-tree= handling; when --work-tree=<something> is specified, GIT_WORK_TREE is _forced_ to the new value, so it is literally handled by the same code as GIT_WORK_TREE.

Ciao, Dscho

Previous: Johannes Schindelin
Message 30 of 30 in “work-tree clean ups”
  1. 0/9 work-tree clean upsJohannes Schindelin, Jul 29, 2007
  2. 1/9 Add is_absolute_path() and make_absolute_path()Johannes Schindelin, Jul 29, 2007
  3. 2/9 Add functions get_relative_cwd() and is_inside_dir()Johannes Schindelin, Jul 29, 2007
  4. 3/9 white space fixes in setup.cJohannes Schindelin, Jul 29, 2007
  5. 4/9 Clean up work-tree handlingJohannes Schindelin, Jul 29, 2007
  6. 5/9 Add set_git_dir() functionJohannes Schindelin, Jul 29, 2007
  7. 6/9 work-trees are allowed inside a git-dirJohannes Schindelin, Jul 29, 2007
  8. 7/9 init: use get_git_work_tree() instead of rolling our ownJohannes Schindelin, Jul 29, 2007
  9. 8/9 Fix t1501 for updated work-tree logicJohannes Schindelin, Jul 29, 2007
  10. 9/9 Fix t1500 for sane work-tree behaviorJohannes Schindelin, Jul 29, 2007
  11. Die if core.bare = true and core.worktree is setJohannes Schindelin, Jul 29, 2007
  12. Johannes SchindelinAug 1, 2007
  13. 1/4 Add is_absolute_path() and make_absolute_path()Johannes Schindelin, Aug 1, 2007
  14. 2/4 Add functions get_relative_cwd() and is_inside_dir()Johannes Schindelin, Aug 1, 2007
  15. Junio C HamanoAug 1, 2007
  16. Junio C HamanoAug 1, 2007
  17. Johannes SchindelinAug 1, 2007
  18. Make get_relative_cwd() not accept NULL for a directoryJohannes Schindelin, Aug 1, 2007
  19. Junio C HamanoAug 1, 2007
  20. get_relative_cwd(): clarify why it handles dir == NULLJohannes Schindelin, Aug 1, 2007
  21. 3/4 Add set_git_dir() functionJohannes Schindelin, Aug 1, 2007
  22. 4/4 Clean up work-tree handlingJohannes Schindelin, Aug 1, 2007
  23. Junio C HamanoAug 1, 2007
  24. Johannes SchindelinAug 1, 2007
  25. Junio C HamanoAug 2, 2007
  26. Junio C HamanoAug 1, 2007
  27. Johannes SchindelinAug 1, 2007
  28. Junio C HamanoAug 1, 2007
  29. Johannes SchindelinAug 1, 2007
  30. Johannes SchindelinAug 1, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.