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

Re: [PATCH 1/8] update-index: add untracked cache notifications

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 8, 2015, 19:03 UTC
Message-ID
<xmqq6108lq3w.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<1449594916-21167-2-git-send-email-chriscool@tuxfamily.org>
Christian Couder <christian.couder@gmail.com> writes:
Show 8 quoted lines
> Doing:
>
>   cd /tmp
>   git --git-dir=/git/somewhere/else/.git update-index --untracked-cache
>
> doesn't work how one would expect. It hardcodes "/tmp" as the directory
> that "works" into the index, so if you use the working tree, you'll
> never use the untracked cache.
I think your "expectation" needs to be more explicitly spelled out.

"git -C /tmp --git-dir=/git/somewhere/else/.git" is a valid way to use that repository you have in somewhere else to track things under /tmp/ (as you are only passing GIT_DIR but not GIT_WORK_TREE, the cwd, i.e. /tmp, is the root level of the working tree), and for such a usage, the above command works as expected. Perhaps

    Attempting to flip the untracked-cache feature on for a random index
    file with
       cd /random/unrelated/place
       git --git-dir=/somewhere/else/.git update-index --untracked-cache
    would not work as you might expect.  Because flipping the
    feature on in the index also records the location of the
    corresponding working tree (/random/unrelated/place in the above
    example), when the index is subsequently used to keep track of
    files in the working tree in /somewhere/else, the feature is
    disabled.
may be an improvement.

The index already implicitly records where the working tree was and that is not limited to untracked-cache option. For example, if you have your repository and its working tree in /git/somewhere/else, which does not have a path X, then doing:

    cd /tmp && >tmp/X
    git --git-dir=/git/somewhere/else/.git update-index --add X

would store X taken from /tmp in the index, so subsequent use of the index "knows" about X that was taken outside /git/somewhere/else/ after the above command finishes and the subsequent use is made without the --git-dir parameter, e.g.

    cd /git/somewhere/else/ && git diff-index --cached HEAD'

would say that you added X, even though /git/somewhere/else/ may not have that X at all. And this is not limited to update-index, either. You can temporarily use --git-dir with "git add X" and the result would persist the same way in the index.

I think the moral of the story is that you are not expected to randomly use git-dir and git-work-tree to point at different places without knowing what you are doing, and we may need a way to help people understand what is going on when it is done by a mistake.

The patch to show result from xgetcwd() and get_git_work_tree() may be a step in the right direction, but if the user is not doing anything fancy, "Testing mtime in /long/path/to/the/directory" would be irritatingly verbose.

I wonder if it is easy to tell when the user is doing such an unnatural thing. Off the top of my head, when the working tree is anywhere other than one level above $GIT_DIR, the user is doing something unusual; I do not know if there are cases where the user is doing something unnatural if $GIT_WORK_TREE is one level above $GIT_DIR, though.

Show 34 quoted lines
> With this patch "git update-index --untracked-cache" tells the user in
> which directory tests are performed and in which working directory the
> untracked cache is allowed.
>
> Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
> ---
>  builtin/update-index.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/builtin/update-index.c b/builtin/update-index.c
> index 7431938..6f6b289 100644
> --- a/builtin/update-index.c
> +++ b/builtin/update-index.c
> @@ -121,7 +121,7 @@ static int test_if_untracked_cache_is_supported(void)
>  	if (!mkdtemp(mtime_dir.buf))
>  		die_errno("Could not make temporary directory");
>  
> -	fprintf(stderr, _("Testing "));
> +	fprintf(stderr, _("Testing mtime in '%s' "), xgetcwd());
>  	atexit(remove_test_directory);
>  	xstat_mtime_dir(&st);
>  	fill_stat_data(&base, &st);
> @@ -1122,9 +1122,11 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
>  		}
>  		add_untracked_ident(the_index.untracked);
>  		the_index.cache_changed |= UNTRACKED_CHANGED;
> +		fprintf(stderr, _("Untracked cache enabled for '%s'\n"), get_git_work_tree());
>  	} else if (!untracked_cache && the_index.untracked) {
>  		the_index.untracked = NULL;
>  		the_index.cache_changed |= UNTRACKED_CHANGED;
> +		fprintf(stderr, _("Untracked cache disabled\n"));
>  	}
>  
>  	if (active_cache_changed) {
Previous: Christian CouderNext: Christian Couder
Message 3 of 54 in “Untracked cache improvements”
  1. 0/8 Untracked cache improvementsChristian Couder, Dec 8, 2015
  2. 1/8 update-index: add untracked cache notificationsChristian Couder, Dec 8, 2015
  3. Junio C HamanoDec 8, 2015
  4. Christian CouderDec 11, 2015
  5. 2/8 update-index: use enum for untracked cache optionsChristian Couder, Dec 8, 2015
  6. Junio C HamanoDec 8, 2015
  7. Christian CouderDec 10, 2015
  8. Junio C HamanoDec 10, 2015
  9. Christian CouderDec 11, 2015
  10. Junio C HamanoDec 11, 2015
  11. Christian CouderDec 12, 2015
  12. 3/8 update-index: add --test-untracked-cacheChristian Couder, Dec 8, 2015
  13. 4/8 update-index: move 'uc' var declarationChristian Couder, Dec 8, 2015
  14. 5/8 dir: add add_untracked_cache()Christian Couder, Dec 8, 2015
  15. Torsten BögershausenDec 9, 2015
  16. Christian CouderDec 11, 2015
  17. 6/8 dir: add remove_untracked_cache()Christian Couder, Dec 8, 2015
  18. Junio C HamanoDec 8, 2015
  19. Torsten BögershausenDec 9, 2015
  20. 7/8 config: add core.untrackedCacheChristian Couder, Dec 8, 2015
  21. Junio C HamanoDec 8, 2015
  22. Junio C HamanoDec 8, 2015
  23. Christian CouderDec 14, 2015
  24. Junio C HamanoDec 14, 2015
  25. Junio C HamanoDec 14, 2015
  26. Christian CouderDec 15, 2015
  27. Torsten BögershausenDec 15, 2015
  28. Christian CouderDec 15, 2015
  29. Duy NguyenDec 15, 2015
  30. Christian CouderDec 15, 2015
  31. Ævar Arnfjörð BjarmasonDec 15, 2015
  32. Christian CouderDec 15, 2015
  33. Junio C HamanoDec 15, 2015
  34. Ævar Arnfjörð BjarmasonDec 15, 2015
  35. Junio C HamanoDec 15, 2015
  36. Ævar Arnfjörð BjarmasonDec 16, 2015
  37. Jeff KingDec 16, 2015
  38. Junio C HamanoDec 16, 2015
  39. Junio C HamanoDec 16, 2015
  40. Jeff KingDec 17, 2015
  41. Duy NguyenDec 17, 2015
  42. Junio C HamanoDec 21, 2015
  43. Duy NguyenDec 22, 2015
  44. Junio C HamanoDec 22, 2015
  45. Junio C HamanoDec 24, 2015
  46. Duy NguyenDec 24, 2015
  47. Junio C HamanoDec 27, 2015
  48. Christian CouderDec 24, 2015
  49. Duy NguyenDec 17, 2015
  50. Christian CouderDec 18, 2015
  51. Torsten BögershausenDec 9, 2015
  52. 8/8 t7063: add tests for core.untrackedCacheChristian Couder, Dec 8, 2015
  53. Fwd: [PATCH 7/8] config: add core.untrackedCacheChristian Couder, Dec 18, 2015
  54. Fwd: [PATCH 7/8] config: add core.untrackedCacheChristian Couder, Dec 18, 2015

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.