Re: [PATCH v4 09/10] config: add core.untrackedCache

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH v4 09/10] config: add core.untrackedCache

From: Junio C Hamano <hidden>
Date: 2016-06-15 23:07:37

Christian Couder [off-list ref] writes:
What scenario do you have in mind where people would have to do things
differently?
They eventually will see a system in which that they do not have do
anything after flipping the configuration, yet will still see stale
"you must run 'git status'" on their websearches and SO questions,
which would be a cost for them to remember that they no longer have
to do the extra 'git status'.
quoted
Itt sounds like somewhat a short-sighted mindset to design the
system, and I was hoping that by now you would have become better
than that.

The real question is what are the problems in implementing this in
the way Duy suggested in the previous discussion.  The answer may
fall into somewhere between "that approach does not work in such and
such cases, so this is the best I could come up with" and "I know
that approach is far superiour, but I have invested too much in this
inferiour approach and refuse to rework it further to make it better."
My question is why should I invest time thinking about and testing
another approach when the current approach seems simpler, less bug
prone, faster and without any downside?
As to the downside, I think Duy's "at the time we read the index" is
the least problematic route from the maintainability point of view.
What are you doing to help people who make changes in the future to
the system to make "git add $dir" or "git clean $dir" aware of the
untracked cache not to forget doing the "oh, the config says we want
to add the untracked cache if missing, so we do it here" in their
new codepath?  Whey you say "This is only about status", you are
essentially saying "It's outside the scope of my job, I was hired to
improve the usability of 'git status' with untracked cache and I do
not care about the longer term overall health of the system".

Now, you said something about "simpler", "less bug prone" and
"faster" (I doubt you can make such statements that involve
comparison without investing time thinking about other approaches,
though, but that is a separate topic).  That would mean that you see
"complexity", "error prone-ness", and "slowness" in the way Duy
suggested---that is exactly the question I asked you in the message
you are responding to.  What are the problems in implementing this
in the way Duy suggested?  What kind of "complexity" do you see?
Which part is more "error prone"?  Why does it have to be "slower"?
quoted
Using of not using untracked-cache is (supposed to be) purely
performance and not correctness thing, and I do not think the users
and the scripts do not deserve to see a failure from "update-index
--untracked-cache" only because there is a stray core.untrackedCache
set to 'false' somewhere.
This "stray core.untrackedCache" could not have been put there by
users of previous git versions because it has no meaning before this
patch series. So I don't understand why you call it "a stray
core.untrackedCache".

It is no more "stray" to me than the call to "update-index --untracked-cache".

If it has been put in /etc/git.config by an admin and if the user
thinks he knows better, the user can still change the config locally
to override the system one.
You are assuming that everybody constantly looks at /etc/git.config
to make sure evil admins won't do things that affect their
repositories and use of Git in potentially negative way.  I doubt
anybody does.

By the way, I understand that this "stray one affects without user
being aware of it" is the primary the reason why Ævar wants this
'configuration automatically adds untracked cache even to the
existing index' feature---everybody will get it without even be
aware of the change their admins make.  Which may be a good thing
for those who use the configuration variable.

Re: [PATCH v4 09/10] config: add core.untrackedCache

From: Christian Couder <hidden>
Date: 2016-06-15 23:07:40

On Mon, Jan 4, 2016 at 7:09 PM, Junio C Hamano [off-list ref] wrote:
Christian Couder [off-list ref] writes:
quoted
quoted
The real question is what are the problems in implementing this in
the way Duy suggested in the previous discussion.  The answer may
fall into somewhere between "that approach does not work in such and
such cases, so this is the best I could come up with" and "I know
that approach is far superiour, but I have invested too much in this
inferiour approach and refuse to rework it further to make it better."
My question is why should I invest time thinking about and testing
another approach when the current approach seems simpler, less bug
prone, faster and without any downside?
I just tried Duy's approach by moving into read_index_from() the code
I had put in wt_status_collect_untracked() and it doesn't work because
"git status" calls read_index_from() before calling
git_default_core_config().

The interesting parts of the backtraces for both calls are the following:

#0  read_index_from (istate=0x8660a0 <the_index>, path=0x868b90
".git/index") at read-cache.c:1626
#1  0x0000000000530ba3 in read_index (istate=0x8660a0 <the_index>) at
read-cache.c:1404
#2  0x00000000005743e1 in gitmodules_config () at submodule.c:188
#3  0x0000000000431ed0 in status_init_config (s=0x83aa20 <s>,
fn=0x434edd <git_status_config>) at builtin/commit.c:186

#0  git_default_core_config (var=0x86ac00 "core.untrackedcache",
value=0x86ac60 "true") at config.c:695
#1  0x00000000004be761 in git_default_config (var=0x86ac00
"core.untrackedcache", value=0x86ac60 "true", dummy=0x0) at
config.c:1016
#2  0x00000000004cfeba in git_diff_basic_config (var=0x86ac00
"core.untrackedcache", value=0x86ac60 "true", cb=0x0) at diff.c:277
#3  0x00000000004cfc9b in git_diff_ui_config (var=0x86ac00
"core.untrackedcache", value=0x86ac60 "true", cb=0x0) at diff.c:230
#4  0x000000000043524a in git_status_config (k=0x86ac00
"core.untrackedcache", v=0x86ac60 "true", cb=0x83aa20 <s>) at
builtin/commit.c:1313
#5  0x00000000004bf183 in configset_iter (cs=0x8495e0
<the_config_set>, fn=0x434edd <git_status_config>, data=0x83aa20 <s>)
at config.c:1305
#6  0x00000000004bf206 in git_config (fn=0x434edd <git_status_config>,
data=0x83aa20 <s>) at config.c:1317
#7  0x0000000000431ee3 in status_init_config (s=0x83aa20 <s>,
fn=0x434edd <git_status_config>) at builtin/commit.c:187

You can see that in status_init_config(), gitmodules_config() is
called just before git_config().
And unfortunately gitmodules_config() indirectly calls read_index_from().

So indeed it seems very bug prone to me to rely on read_index_from()
being called before git_default_core_config().
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help