Make use of stat.ctime configurable
A new configuration variable 'core.trustctime' is introduced to allow ignoring st_ctime information when checking if paths in the working tree has changed, because there are situations where it produces too much false positives. Like when file system crawlers keep changing it when scanning and using the ctime for marking scanned files. The default is to notice ctime changes. Signed-off-by: Alex Riesen <raa.lkml@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
df57accb46
commit
1ce4790bf5
@ -117,6 +117,13 @@ core.fileMode::
|
||||
the working copy are ignored; useful on broken filesystems like FAT.
|
||||
See linkgit:git-update-index[1]. True by default.
|
||||
|
||||
core.trustctime::
|
||||
If false, the ctime differences between the index and the
|
||||
working copy are ignored; useful when the inode change time
|
||||
is regularly modified by something outside Git (file system
|
||||
crawlers and some backup systems).
|
||||
See linkgit:git-update-index[1]. True by default.
|
||||
|
||||
core.quotepath::
|
||||
The commands that output paths (e.g. 'ls-files',
|
||||
'diff'), when not given the `-z` option, will quote
|
||||
|
@ -323,6 +323,11 @@ from symbolic link to regular file.
|
||||
The command looks at `core.ignorestat` configuration variable. See
|
||||
'Using "assume unchanged" bit' section above.
|
||||
|
||||
The command also looks at `core.trustctime` configuration variable.
|
||||
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]).
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
|
1
cache.h
1
cache.h
@ -423,6 +423,7 @@ extern int delete_ref(const char *, const unsigned char *sha1);
|
||||
|
||||
/* Environment bits from configuration mechanism */
|
||||
extern int trust_executable_bit;
|
||||
extern int trust_ctime;
|
||||
extern int quote_path_fully;
|
||||
extern int has_symlinks;
|
||||
extern int ignore_case;
|
||||
|
4
config.c
4
config.c
@ -341,6 +341,10 @@ static int git_default_core_config(const char *var, const char *value)
|
||||
trust_executable_bit = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(var, "core.trustctime")) {
|
||||
trust_ctime = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.quotepath")) {
|
||||
quote_path_fully = git_config_bool(var, value);
|
||||
|
@ -13,6 +13,7 @@ char git_default_email[MAX_GITNAME];
|
||||
char git_default_name[MAX_GITNAME];
|
||||
int user_ident_explicitly_given;
|
||||
int trust_executable_bit = 1;
|
||||
int trust_ctime = 1;
|
||||
int has_symlinks = 1;
|
||||
int ignore_case;
|
||||
int assume_unchanged;
|
||||
|
@ -197,7 +197,7 @@ static int ce_match_stat_basic(struct cache_entry *ce, struct stat *st)
|
||||
}
|
||||
if (ce->ce_mtime != (unsigned int) st->st_mtime)
|
||||
changed |= MTIME_CHANGED;
|
||||
if (ce->ce_ctime != (unsigned int) st->st_ctime)
|
||||
if (trust_ctime && ce->ce_ctime != (unsigned int) st->st_ctime)
|
||||
changed |= CTIME_CHANGED;
|
||||
|
||||
if (ce->ce_uid != (unsigned int) st->st_uid ||
|
||||
|
Loading…
Reference in New Issue
Block a user