git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jonathan Tan <jonathantanmy@google.com>
To: Ben Peart <peartben@gmail.com>, git@vger.kernel.org
Cc: gitster@pobox.com, benpeart@microsoft.com, pclouds@gmail.com,
	johannes.schindelin@gmx.de, David.Turner@twosigma.com,
	peff@peff.net
Subject: Re: [PATCH v1 2/5] Teach git to optionally utilize a file system monitor to speed up detecting new or changed files.
Date: Tue, 16 May 2017 14:41:08 -0700	[thread overview]
Message-ID: <473c4b47-06a7-cb55-6d67-e335fa5b5a5b@google.com> (raw)
In-Reply-To: <20170515191347.1892-3-benpeart@microsoft.com>

I'm not very familiar with this part of the code - here is a partial review.

Firstly, if someone invokes update-index, I wonder if it's better just 
to do a full refresh (e.g. by deleting the last_update time from the index).

Also, the change to unpack-trees.c doesn't match my mental model. I 
notice that it is in a function related to sparse checkout, but if the 
working tree changes for whatever reason, it seems simpler to just let 
the hook do its thing. As far as I can tell, it is fine to have files 
overzealously marked as FSMONITOR_DIRTY.

On 05/15/2017 12:13 PM, Ben Peart wrote:
> diff --git a/cache.h b/cache.h
> index 40ec032a2d..64aa6e57cd 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -201,6 +201,7 @@ struct cache_entry {
>  #define CE_ADDED             (1 << 19)
>
>  #define CE_HASHED            (1 << 20)
> +#define CE_FSMONITOR_DIRTY   (1 << 21)
>  #define CE_WT_REMOVE         (1 << 22) /* remove in work directory */
>  #define CE_CONFLICTED        (1 << 23)
>
> @@ -324,6 +325,7 @@ static inline unsigned int canon_mode(unsigned int mode)
>  #define CACHE_TREE_CHANGED	(1 << 5)
>  #define SPLIT_INDEX_ORDERED	(1 << 6)
>  #define UNTRACKED_CHANGED	(1 << 7)
> +#define FSMONITOR_CHANGED	(1 << 8)
>
>  struct split_index;
>  struct untracked_cache;
> @@ -342,6 +344,8 @@ struct index_state {
>  	struct hashmap dir_hash;
>  	unsigned char sha1[20];
>  	struct untracked_cache *untracked;
> +	time_t last_update;
> +	struct ewah_bitmap *bitmap;

Here a bitmap is introduced, presumably corresponding to the entries in 
"struct cache_entry **cache", but there is also a CE_FSMONITOR_DIRTY 
that can be set in each "struct cache_entry". This seems redundant and 
probably at least worth explaining in a comment.

> +/*
> + * Call the query-fsmonitor hook passing the time of the last saved results.
> + */
> +static int query_fsmonitor(time_t last_update, struct strbuf *buffer)
> +{
> +	struct child_process cp = CHILD_PROCESS_INIT;
> +	char date[64];
> +	const char *argv[3];
> +
> +	if (!(argv[0] = find_hook("query-fsmonitor")))
> +		return -1;
> +
> +	snprintf(date, sizeof(date), "%" PRIuMAX, (uintmax_t)last_update);
> +	argv[1] = date;
> +	argv[2] = NULL;
> +	cp.argv = argv;
> +	cp.out = -1;
> +
> +	return capture_command(&cp, buffer, 1024);
> +}

Output argument could probably be named better.

Also, would the output of this command be very large? If yes, it might 
be better to process it little by little instead of buffering the whole 
thing first.

> +void write_fsmonitor_extension(struct strbuf *sb, struct index_state* istate);

Space before * (in the .h and .c files).


  parent reply	other threads:[~2017-05-16 21:41 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-15 19:13 [PATCH v1 0/5] Fast git status via a file system watcher Ben Peart
2017-05-15 19:13 ` [PATCH v1 1/5] dir: make lookup_untracked() available outside of dir.c Ben Peart
2017-05-16  5:01   ` Junio C Hamano
2017-05-15 19:13 ` [PATCH v1 2/5] Teach git to optionally utilize a file system monitor to speed up detecting new or changed files Ben Peart
2017-05-15 21:21   ` David Turner
2017-05-16  1:15     ` Ben Peart
2017-05-16  0:22   ` brian m. carlson
2017-05-16  0:34     ` Jeff King
2017-05-16  1:55       ` Ben Peart
2017-05-16  2:51         ` Jeff King
2017-05-16 17:17         ` Ben Peart
2017-05-16 17:49           ` Jeff King
2017-05-16 19:13           ` Johannes Sixt
2017-05-17 14:26             ` Ben Peart
2017-05-17 18:15               ` Johannes Sixt
2017-05-18  4:52                 ` Jeff King
2017-05-16 21:41   ` Jonathan Tan [this message]
2017-05-17  3:35     ` Ben Peart
2017-05-15 19:13 ` [PATCH v1 3/5] fsmonitor: add test cases for fsmonitor extension Ben Peart
2017-05-16  4:59   ` Junio C Hamano
2017-05-16 14:28     ` Ben Peart
2017-05-15 19:13 ` [PATCH v1 4/5] Add documentation for the fsmonitor extension. This includes the core.fsmonitor setting, the query-fsmonitor hook, and the fsmonitor index extension Ben Peart
2017-05-15 19:13 ` [PATCH v1 5/5] Add a sample query-fsmonitor hook script that integrates with the cross platform Watchman file watching service Ben Peart
2017-05-15 19:50   ` David Turner
2017-05-15 20:10     ` Ben Peart
2017-05-16  5:00 ` [PATCH v1 0/5] Fast git status via a file system watcher Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=473c4b47-06a7-cb55-6d67-e335fa5b5a5b@google.com \
    --to=jonathantanmy@google.com \
    --cc=David.Turner@twosigma.com \
    --cc=benpeart@microsoft.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=johannes.schindelin@gmx.de \
    --cc=pclouds@gmail.com \
    --cc=peartben@gmail.com \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).