Re: [RFC/PATCH 6/8] config: add core.untrackedCache

2015-12-04 Thread Christian Couder
On Fri, Dec 4, 2015 at 6:54 PM, Torsten Bögershausen  wrote:
>> Current state of affairs:
>>
>>  * Enable on a per-repo basis: git update-index --untracked-cache
>>  * Disable on a per-repo basis: git update-index --no-cache
>>  * Enable system-wide: N/A
>>  * Disable system-wide: N/A
>>
>> With this patch:
>>
>>  * Enable on a per-repo basis: git update-index --untracked-cache OR
>> "git config core.untrackedCache true"
>>  * Disable on a per-repo basis: git update-index --no-cache OR "git
>> config core.untrackedCache false"
>>  * Enable system-wide: git config --global core.untrackedCache true
>>  * Disable system-wide: git config --global core.untrackedCache false
>>  * Caveat: The core.untrackedCache config has precidence over "git 
>> update-index"
>>
>> With the rest of the patches in this series:
>>
>>  * Enable system-wide & per-repo the same, just tweak
>> core.untrackedCache either for the local .git or --globally
>>  * If you want to test things either per-repo or globally just use
>> "git update-index --test-untracked-cache"
>>  * If you want something exactly like the old --untracked-cache do:
>> "git update-index --test-untracked-cache && git config
>> core.untrackedCache true"
>>
>> I think applying this whole series makes sense. Enabling this feature
>> doesn't work like anything else in Git, usually you just tweak a
>> config option and thus can easily enable things either system-wide or
>> per-repo (or any combination of the two), which makes both system
>> administration and local configuration easy.
>>
>> A much saner UI for the CLI tools if we're going to ship git with
>> tests for filesystem features is to separate the testing from the
>> enabling of those features.
>
> My spontanous feeling: squash 6-8 together and add this nice explanation
> to the commit message.

Ok, I will do that then.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC/PATCH 6/8] config: add core.untrackedCache

2015-12-04 Thread Torsten Bögershausen
> Current state of affairs:
> 
>  * Enable on a per-repo basis: git update-index --untracked-cache
>  * Disable on a per-repo basis: git update-index --no-cache
>  * Enable system-wide: N/A
>  * Disable system-wide: N/A
> 
> With this patch:
> 
>  * Enable on a per-repo basis: git update-index --untracked-cache OR
> "git config core.untrackedCache true"
>  * Disable on a per-repo basis: git update-index --no-cache OR "git
> config core.untrackedCache false"
>  * Enable system-wide: git config --global core.untrackedCache true
>  * Disable system-wide: git config --global core.untrackedCache false
>  * Caveat: The core.untrackedCache config has precidence over "git 
> update-index"
> 
> With the rest of the patches in this series:
> 
>  * Enable system-wide & per-repo the same, just tweak
> core.untrackedCache either for the local .git or --globally
>  * If you want to test things either per-repo or globally just use
> "git update-index --test-untracked-cache"
>  * If you want something exactly like the old --untracked-cache do:
> "git update-index --test-untracked-cache && git config
> core.untrackedCache true"
> 
> I think applying this whole series makes sense. Enabling this feature
> doesn't work like anything else in Git, usually you just tweak a
> config option and thus can easily enable things either system-wide or
> per-repo (or any combination of the two), which makes both system
> administration and local configuration easy.
> 
> A much saner UI for the CLI tools if we're going to ship git with
> tests for filesystem features is to separate the testing from the
> enabling of those features.

My spontanous feeling: squash 6-8 together and add this nice explanation
to the commit message.

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC/PATCH 6/8] config: add core.untrackedCache

2015-12-03 Thread Christian Couder
On Thu, Dec 3, 2015 at 5:10 PM, Torsten Bögershausen  wrote:
> [snip all good stuff]
>
> First of all:
> Thanks for explaining it so well
>
> I now can see the point in having this patch.
> (Do the commit messages reflect all this ? I need to re-read)

Maybe not. I will have a look at improving them, but your re-reading is welcome.

> The other question is: Do you have patch on a public repo ?

Yes, here: https://github.com/chriscool/git/commits/uc-notifs8

> And, of course, can we add 1 or 2 test cases ?

Yes I had planned to add tests for this.
But it would be nice if I could know first if the last two patches are
considered ok even though they are breaking compatibility a bit.
In this case I could squash them with previous patches and only write
tests for the resulting patches.

> Thanks for pushing this forward.

Thanks for your reviews,
Christian.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC/PATCH 6/8] config: add core.untrackedCache

2015-12-03 Thread Torsten Bögershausen
[snip all good stuff]

First of all:
Thanks for explaining it so well

I now can see the point in having this patch.
(Do the commit messages reflect all this ? I need to re-read)

The other question is: Do you have patch on a public repo ?

And, of course, can we add 1 or 2 test cases ?


Thanks for pushing this forward.


--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



Re: [RFC/PATCH 6/8] config: add core.untrackedCache

2015-12-02 Thread Ævar Arnfjörð Bjarmason
On Wed, Dec 2, 2015 at 8:12 AM, Torsten Bögershausen  wrote:
> On 12/01/2015 09:31 PM, Christian Couder wrote:
>>
>> When we know that mtime is fully supported by the environment, we
>> might want the untracked cache to be always used by default without
>> any mtime test or kernel version check being performed.
>

[Re-arranged some of the quotes for the clarity of my reply]

[Also: Full disclosure, Christian is working on this for Booking.com,
and I'm managing that project...]

> I always want to test and verify that the untracked cache is working,
> before I rely on it.

Then with this patch you can just not use the core.untrackedCache=true
option, or with the later patches in this series use "git update-index
--test-untracked-cache && git config core.untrackedCache true".

> I'm not sure if ever "we know" ?
> How can we know without testing ?
> I personaly can not say "I know" in all the different system I am using,

Some users of Git can know that their mtime works, just like they know
they deploy it on filesystems where say symlinks work.

The current implementation of turning on this feature needs to be run
on a per-repo basis and without the --force option includes mandatory
tests, which a) makes it inconvenient to deploy across all Git repos
on a set of machines b) Is needlessly paranoid as a default way to
enable it.

>> Also when we know that mtime is not supported by the environment,
>> for example because the repo is shared over a network file system,
>> then we might want 'git update-index --untracked-cache' to fail
>> immediately instead of it testing if it works (because it might
>> work on some systems using the repo over the network file system
>> but not others).
>
> Same here.
>
>> Signed-off-by: Christian Couder 
>> ---
>>   Documentation/config.txt   | 10 ++
>>   Documentation/git-update-index.txt | 11 +--
>>   builtin/update-index.c | 28 ++--
>>   cache.h|  1 +
>>   config.c   | 10 ++
>>   contrib/completion/git-completion.bash |  1 +
>>   dir.c  |  2 +-
>>   environment.c  |  1 +
>>   wt-status.c|  9 +
>>   9 files changed, 60 insertions(+), 13 deletions(-)
>>
>> diff --git a/Documentation/config.txt b/Documentation/config.txt
>> index b4b0194..bf176ff 100644
>> --- a/Documentation/config.txt
>> +++ b/Documentation/config.txt
>> @@ -308,6 +308,16 @@ core.trustctime::
>> crawlers and some backup systems).
>> See linkgit:git-update-index[1]. True by default.
>>   +core.untrackedCache::
>> +   If unset or set to 'default' or 'check', untracked cache will
>> +   not be enabled by default and when
>> +   'update-index --untracked-cache' is called, Git will test if
>> +   mtime is working properly before enabling it. If set to false,
>> +   Git will refuse to enable untracked cache even if
>> +   '--force-untracked-cache' is used. If set to true, Git will
>> +   blindly enabled untracked cache by default without testing if
>> +   it works. See linkgit:git-update-index[1].
>> +
>
> Please no.
> The command line option should always be able to overwrite any settings
> from a config file.

If we keep this patch and not the rest in this series (which I think
should also be applied) you'd either use the update-index way of
changing the setting, or the config option.

> Sorry, I may missing the big picture here.
> What exactly should be achieved ?
>
> A config variable that should ask Git to always try to use the untracked
> cache ?
> Or a config variable that tells Git to never use the untracked cache ?
> Or a combination ?
>
> core.untrackedCache::
>  false: Never use the untracked cache ?
>  true: Always try to use the untracked cache ?
>Try means: probe, and if the probing fails, record that if fails in
> the index,
>for this hostname/os/kernel/path (Don't remember all the details)
> unset: As today,

As discussed in the "[RFC/PATCH] config: add core.trustmtime" thread
this feature is IMO needlessly paranoid about enabling itself.

Current state of affairs:

 * Enable on a per-repo basis: git update-index --untracked-cache
 * Disable on a per-repo basis: git update-index --no-cache
 * Enable system-wide: N/A
 * Disable system-wide: N/A

With this patch:

 * Enable on a per-repo basis: git update-index --untracked-cache OR
"git config core.untrackedCache true"
 * Disable on a per-repo basis: git update-index --no-cache OR "git
config core.untrackedCache false"
 * Enable system-wide: git config --global core.untrackedCache true
 * Disable system-wide: git config --global core.untrackedCache false
 * Caveat: The core.untrackedCache config has precidence over "git update-index"

With the rest of the patches in this series:

 * Enable system-wide & per-repo the same, just tweak
core.untrackedCache eithe

Re: [RFC/PATCH 6/8] config: add core.untrackedCache

2015-12-01 Thread Torsten Bögershausen

On 12/01/2015 09:31 PM, Christian Couder wrote:

When we know that mtime is fully supported by the environment, we
might want the untracked cache to be always used by default without
any mtime test or kernel version check being performed.

I'm not sure if ever "we know" ?
How can we know without testing ?
I personaly can not say "I know" in all the different system I am using,
so I always want to test and verify that the untracked cache is working,
before I rely on it.



Also when we know that mtime is not supported by the environment,
for example because the repo is shared over a network file system,
then we might want 'git update-index --untracked-cache' to fail
immediately instead of it testing if it works (because it might
work on some systems using the repo over the network file system
but not others).

Same here.

Signed-off-by: Christian Couder 
---
  Documentation/config.txt   | 10 ++
  Documentation/git-update-index.txt | 11 +--
  builtin/update-index.c | 28 ++--
  cache.h|  1 +
  config.c   | 10 ++
  contrib/completion/git-completion.bash |  1 +
  dir.c  |  2 +-
  environment.c  |  1 +
  wt-status.c|  9 +
  9 files changed, 60 insertions(+), 13 deletions(-)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index b4b0194..bf176ff 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -308,6 +308,16 @@ core.trustctime::
crawlers and some backup systems).
See linkgit:git-update-index[1]. True by default.
  
+core.untrackedCache::

+   If unset or set to 'default' or 'check', untracked cache will
+   not be enabled by default and when
+   'update-index --untracked-cache' is called, Git will test if
+   mtime is working properly before enabling it. If set to false,
+   Git will refuse to enable untracked cache even if
+   '--force-untracked-cache' is used. If set to true, Git will
+   blindly enabled untracked cache by default without testing if
+   it works. See linkgit:git-update-index[1].
+

Please no.
The command line option should always be able to overwrite any settings
from a config file.


Sorry, I may missing the big picture here.
What exactly should be achieved ?

A config variable that should ask Git to always try to use the untracked 
cache ?

Or a config variable that tells Git to never use the untracked cache ?
Or a combination ?

core.untrackedCache::
 false: Never use the untracked cache ?
 true: Always try to use the untracked cache ?
   Try means: probe, and if the probing fails, record that if fails in the 
index,
   for this hostname/os/kernel/path (Don't remember all the details)
unset: As today,

  



--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[RFC/PATCH 6/8] config: add core.untrackedCache

2015-12-01 Thread Christian Couder
When we know that mtime is fully supported by the environment, we
might want the untracked cache to be always used by default without
any mtime test or kernel version check being performed.

Also when we know that mtime is not supported by the environment,
for example because the repo is shared over a network file system,
then we might want 'git update-index --untracked-cache' to fail
immediately instead of it testing if it works (because it might
work on some systems using the repo over the network file system
but not others).

Signed-off-by: Christian Couder 
---
 Documentation/config.txt   | 10 ++
 Documentation/git-update-index.txt | 11 +--
 builtin/update-index.c | 28 ++--
 cache.h|  1 +
 config.c   | 10 ++
 contrib/completion/git-completion.bash |  1 +
 dir.c  |  2 +-
 environment.c  |  1 +
 wt-status.c|  9 +
 9 files changed, 60 insertions(+), 13 deletions(-)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index b4b0194..bf176ff 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -308,6 +308,16 @@ core.trustctime::
crawlers and some backup systems).
See linkgit:git-update-index[1]. True by default.
 
+core.untrackedCache::
+   If unset or set to 'default' or 'check', untracked cache will
+   not be enabled by default and when
+   'update-index --untracked-cache' is called, Git will test if
+   mtime is working properly before enabling it. If set to false,
+   Git will refuse to enable untracked cache even if
+   '--force-untracked-cache' is used. If set to true, Git will
+   blindly enabled untracked cache by default without testing if
+   it works. See linkgit:git-update-index[1].
+
 core.checkStat::
Determines which stat fields to match between the index
and work tree. The user can set this to 'default' or
diff --git a/Documentation/git-update-index.txt 
b/Documentation/git-update-index.txt
index 0ff7396..4e6078b 100644
--- a/Documentation/git-update-index.txt
+++ b/Documentation/git-update-index.txt
@@ -177,7 +177,10 @@ may not support it yet.
up for commands that involve determining untracked files such
as `git status`. The underlying operating system and file
system must change `st_mtime` field of a directory if files
-   are added or deleted in that directory.
+   are added or deleted in that directory. If you want to always
+   enable, or always disable, untracked cache, you can set the
+   `core.untrackedCache` configuration variable to 'true' or
+   'false' respectively, (see linkgit:git-config[1]).
 
 --test-untracked-cache::
Only perform tests on the working directory to make sure
@@ -190,7 +193,9 @@ may not support it yet.
For safety, `--untracked-cache` performs tests on the working
directory to make sure untracked cache can be used. These
tests can take a few seconds. `--force-untracked-cache` can be
-   used to skip the tests.
+   used to skip the tests. It cannot enable untracked cache if
+   `core.untrackedCache` configuration variable is set to false
+   (see linkgit:git-config[1]).
 
 \--::
Do not interpret any more arguments as options.
@@ -406,6 +411,8 @@ It can be useful when the inode change time is regularly 
modified by
 something outside Git (file system crawlers and backup systems use
 ctime for marking files processed) (see linkgit:git-config[1]).
 
+Untracked cache look at `core.untrackedCache` configuration variable
+(see linkgit:git-config[1]).
 
 SEE ALSO
 
diff --git a/builtin/update-index.c b/builtin/update-index.c
index 2cbaee0..bf697a5 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -1106,19 +1106,27 @@ int cmd_update_index(int argc, const char **argv, const 
char *prefix)
the_index.split_index = NULL;
the_index.cache_changed |= SOMETHING_CHANGED;
}
+   if (untracked_cache == 2 || (untracked_cache == 1 && 
use_untracked_cache == -1)) {
+   setup_work_tree();
+   if (!test_if_untracked_cache_is_supported())
+   return 1;
+   if (untracked_cache == 2)
+   return 0;
+   }
if (untracked_cache > 0) {
-   if (untracked_cache < 3) {
-   setup_work_tree();
-   if (!test_if_untracked_cache_is_supported())
-   return 1;
-   if (untracked_cache == 2)
-   return 0;
-   }
+   if (!use_untracked_cache)
+   die("core.untrackedCache is set to false; "
+   "the untracked cache will not be enabled");