git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/4] fsmonitor: Watch, and ask about, the top of the repo, not the CWD

From
AVAlex Vandiver <alexmv@dropbox.com>
Date
Oct 26, 2017, 00:20 UTC
Message-ID
<alpine.DEB.2.10.1710251700300.9817@alexmv-linux>
In-Reply-To
<alpine.DEB.2.21.1.1710201457180.40514@virtualbox>
On Fri, 20 Oct 2017, Johannes Schindelin wrote:
Show 6 quoted lines
> This is super expensive, as it means a full-blown new process instead of
> just a simple environment variable expansion.
> 
> The idea behind using `PWD` instead was that Git will already have done
> all of the work of figuring out the top-level directory and switched to
> there before calling the fsmonitor hook.

I'm not seeing that PWD has been at all altered. The following does seem like a better solution: ------8<-----

diff --git a/fsmonitor.c b/fsmonitor.c
index 7c1540c05..4ea44dcc6 100644
--- a/fsmonitor.c
+++ b/fsmonitor.c
@@ -121,6 +121,7 @@ static int query_fsmonitor(int version, uint64_t last_update, struct strbuf *que
        argv[3] = NULL;
        cp.argv = argv;
        cp.use_shell = 1;
+       cp.dir = get_git_work_tree();

        return capture_command(&cp, query_result, 1024);
 }
------8<-----

I'll re-roll with that.

> Did you see any case where the script was *not* called from the top-level
> directory?

Merely calling `git status` inside a subdirectory is enough to for the
stock watchman config to report that it's in a "new" directory:

    $ watchman watch-list
    {
        "roots": [],
        "version": "4.7.0"
    }
    $ git status
    Adding '/Users/alexmv/src/git' to watchman's watch list.
    On branch test
    nothing to commit, working tree clean
    $ cd builtin/
    $ git status
    Adding '/Users/alexmv/src/git/builtin' to watchman's watch list.
    On branch test
    nothing to commit, working tree clean
    $ watchman watch-list
    {
        "roots": [
            "/Users/alexmv/src/git/builtin",
            "/Users/alexmv/src/git"
        ],
        "version": "4.7.0"
    }

As I understand it, that means that it then loses all performance
gains in the new directory, as it spits out "all dirty."

 - Alex
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 19 of 21 in “fsmonitor fixes”
  1. 0/4 fsmonitor fixesAlex Vandiver, Oct 20, 2017
  2. 2/4 fsmonitor: Don't bother pretty-printing JSON from watchmanAlex Vandiver, Oct 20, 2017
  3. Johannes SchindelinOct 20, 2017
  4. Ben PeartOct 20, 2017
  5. Alex VandiverOct 26, 2017
  6. Johannes SchindelinOct 27, 2017
  7. 3/4 fsmonitor: Document GIT_TRACE_FSMONITORAlex Vandiver, Oct 20, 2017
  8. Ben PeartOct 20, 2017
  9. 4/4 fsmonitor: Delay updating state until after split index is mergedAlex Vandiver, Oct 20, 2017
  10. Johannes SchindelinOct 20, 2017
  11. Ben PeartOct 20, 2017
  12. Junio C HamanoOct 21, 2017
  13. Jeff KingOct 21, 2017
  14. Johannes SchindelinOct 23, 2017
  15. Ben PeartOct 23, 2017
  16. Alex VandiverOct 26, 2017
  17. 1/4 fsmonitor: Watch, and ask about, the top of the repo, not the CWDAlex Vandiver, Oct 20, 2017
  18. Johannes SchindelinOct 20, 2017
  19. Alex VandiverOct 26, 2017
  20. Johannes SchindelinOct 27, 2017
  21. Johannes SchindelinOct 20, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.