зеркало из https://github.com/microsoft/git.git
update-index: add fsmonitor support to update-index
Add support in update-index to manually add/remove the fsmonitor extension via --[no-]fsmonitor flags. Add support in update-index to manually set/clear the fsmonitor valid bit via --[no-]fsmonitor-valid flags. Signed-off-by: Ben Peart <benpeart@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
d8c71db866
Коммит
9d406cba45
|
@ -33,6 +33,7 @@ static int force_remove;
|
|||
static int verbose;
|
||||
static int mark_valid_only;
|
||||
static int mark_skip_worktree_only;
|
||||
static int mark_fsmonitor_only;
|
||||
#define MARK_FLAG 1
|
||||
#define UNMARK_FLAG 2
|
||||
static struct strbuf mtime_dir = STRBUF_INIT;
|
||||
|
@ -229,12 +230,12 @@ static int mark_ce_flags(const char *path, int flag, int mark)
|
|||
int namelen = strlen(path);
|
||||
int pos = cache_name_pos(path, namelen);
|
||||
if (0 <= pos) {
|
||||
mark_fsmonitor_invalid(&the_index, active_cache[pos]);
|
||||
if (mark)
|
||||
active_cache[pos]->ce_flags |= flag;
|
||||
else
|
||||
active_cache[pos]->ce_flags &= ~flag;
|
||||
active_cache[pos]->ce_flags |= CE_UPDATE_IN_BASE;
|
||||
mark_fsmonitor_invalid(&the_index, active_cache[pos]);
|
||||
cache_tree_invalidate_path(&the_index, path);
|
||||
active_cache_changed |= CE_ENTRY_CHANGED;
|
||||
return 0;
|
||||
|
@ -460,6 +461,11 @@ static void update_one(const char *path)
|
|||
die("Unable to mark file %s", path);
|
||||
return;
|
||||
}
|
||||
if (mark_fsmonitor_only) {
|
||||
if (mark_ce_flags(path, CE_FSMONITOR_VALID, mark_fsmonitor_only == MARK_FLAG))
|
||||
die("Unable to mark file %s", path);
|
||||
return;
|
||||
}
|
||||
|
||||
if (force_remove) {
|
||||
if (remove_file_from_cache(path))
|
||||
|
@ -918,6 +924,7 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
|
|||
int lock_error = 0;
|
||||
int split_index = -1;
|
||||
int force_write = 0;
|
||||
int fsmonitor = -1;
|
||||
struct lock_file *lock_file;
|
||||
struct parse_opt_ctx_t ctx;
|
||||
strbuf_getline_fn getline_fn;
|
||||
|
@ -1011,6 +1018,14 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
|
|||
N_("enable untracked cache without testing the filesystem"), UC_FORCE),
|
||||
OPT_SET_INT(0, "force-write-index", &force_write,
|
||||
N_("write out the index even if is not flagged as changed"), 1),
|
||||
OPT_BOOL(0, "fsmonitor", &fsmonitor,
|
||||
N_("enable or disable file system monitor")),
|
||||
{OPTION_SET_INT, 0, "fsmonitor-valid", &mark_fsmonitor_only, NULL,
|
||||
N_("mark files as fsmonitor valid"),
|
||||
PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, MARK_FLAG},
|
||||
{OPTION_SET_INT, 0, "no-fsmonitor-valid", &mark_fsmonitor_only, NULL,
|
||||
N_("clear fsmonitor valid bit"),
|
||||
PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, UNMARK_FLAG},
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
|
@ -1152,6 +1167,22 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
|
|||
die("BUG: bad untracked_cache value: %d", untracked_cache);
|
||||
}
|
||||
|
||||
if (fsmonitor > 0) {
|
||||
if (git_config_get_fsmonitor() == 0)
|
||||
warning(_("core.fsmonitor is unset; "
|
||||
"set it if you really want to "
|
||||
"enable fsmonitor"));
|
||||
add_fsmonitor(&the_index);
|
||||
report(_("fsmonitor enabled"));
|
||||
} else if (!fsmonitor) {
|
||||
if (git_config_get_fsmonitor() == 1)
|
||||
warning(_("core.fsmonitor is set; "
|
||||
"remove it if you really want to "
|
||||
"disable fsmonitor"));
|
||||
remove_fsmonitor(&the_index);
|
||||
report(_("fsmonitor disabled"));
|
||||
}
|
||||
|
||||
if (active_cache_changed || force_write) {
|
||||
if (newfd < 0) {
|
||||
if (refresh_args.flags & REFRESH_QUIET)
|
||||
|
|
Загрузка…
Ссылка в новой задаче