git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH 0/1] Preserve the untracked cache across checkout, reset --hard, etc
@ 2017-05-08  9:41 Johannes Schindelin
  2017-05-08  9:41 ` [PATCH 1/1] unpack-trees: preserve index extensions Johannes Schindelin
  2017-05-08 10:12 ` [PATCH 0/1] Preserve the untracked cache across checkout, reset --hard, etc Christian Couder
  0 siblings, 2 replies; 8+ messages in thread
From: Johannes Schindelin @ 2017-05-08  9:41 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Nguyễn Thái Ngọc Duy, Ben Peart

I recently sent out a request for assistance, after noticing that the
untracked cache is simply thrown away after operations such as
`git checkout` or `git reset --hard`:

http://public-inbox.org/git/alpine.DEB.2.20.1705031202470.3480@virtualbox/

Duy responded with some high-level reasoning that it should be possible
to simply reuse the untracked cache data structure in the new index, as
he had a gut feeling that "we do invalidation right".

I did not have time to back that up by a thorough analysis of the code,
but it turns out that it is unnecessary: Ben Peart pointed me to a patch
of Dave Turner's that was submitted as part of the watchman series,
addressing the very issue about which I was concerned.

And I trust Dave to have validated the idea that the untracked cache
invalidation "is done right" even when we simply move the pointer to a
different index_state struct than originally.

Seeing as the untracked cache being dropped unceremoniously when it
should not be dropped, in a surprising number of operations, I think it
is a sensible change, and important, too, and independent enough from
the watchman patches to merit being separated out and applied pretty
soon.

So what I did was simply to drop the two lines from this patch that
referred to index_state fields added by Dave's watchman patch series.

Please do not mistake this for a sign that I am disinterested in
watchman support, far from it... stay tuned ;-)

Oh, and I adjusted Dave's email address. Dave, is that okay?

As we are in a feature freeze phase, I was debating whether to send out
this patch now or later.

Having thought about it for quite a bit, I am now convinced that this
patch fixes a bug in the untracked cache feature that is so critical as
to render it useless: if you

- have to switch between branches frequently, or
- rebase frequently (which calls `git reset --hard`), or
- stash frequently (which calls `git reset --hard`),

it is as if you had not enabled the untracked cache at all. Even worse,
Git will do a ton of work to recreate the untracked cache and to store
it as an index extension, *just* to throw the untracked away in the end.


David Turner (1):
  unpack-trees: preserve index extensions

 cache.h                           |  1 +
 read-cache.c                      |  6 ++++++
 t/t7063-status-untracked-cache.sh | 22 ++++++++++++++++++++++
 unpack-trees.c                    |  1 +
 4 files changed, 30 insertions(+)


base-commit: 4fa66c85f11bc5a541462ca5ae3246aa0ce02e74
Published-As: https://github.com/dscho/git/releases/tag/preserve-untracked-cache-v1
Fetch-It-Via: git fetch https://github.com/dscho/git preserve-untracked-cache-v1

-- 
2.12.2.windows.2.800.gede8f145e06


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-05-18 17:31 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-08  9:41 [PATCH 0/1] Preserve the untracked cache across checkout, reset --hard, etc Johannes Schindelin
2017-05-08  9:41 ` [PATCH 1/1] unpack-trees: preserve index extensions Johannes Schindelin
2017-05-08 10:12 ` [PATCH 0/1] Preserve the untracked cache across checkout, reset --hard, etc Christian Couder
2017-05-08 15:58   ` David Turner
2017-05-09  5:02     ` Junio C Hamano
2017-05-09 12:51       ` Ben Peart
2017-05-18 16:58         ` Ben Peart
2017-05-18 17:30           ` David Turner

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).