]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fsmonitor: query watchman with right valid json
authorSon Luong Ngoc <sluongng@gmail.com>
Tue, 7 Jun 2022 11:14:19 +0000 (13:14 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 7 Jun 2022 17:00:49 +0000 (10:00 -0700)
In rare circumstances where the current git index does not carry the
last_update_token, the fsmonitor v2 hook will be invoked with an
empty string which would caused the final rendered json to be invalid.

  ["query", "/path/to/my/git/repository/", {
          "since": ,
          "fields": ["name"],
          "expression": ["not", ["dirname", ".git"]]
  }]

Which will left user with the following error message

  > git status
  failed to parse command from stdin: line 2, column 13, position 67: unexpected token near ','
  Watchman: command returned no output.
  Falling back to scanning...

Hide the "since" field in json query when "last_update_token" is empty.

Co-authored-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Son Luong Ngoc <sluongng@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
templates/hooks--fsmonitor-watchman.sample

index 14ed0aa42de0f291c0f696922110e70544c3dae2..23e856f5deeb7f564afc22f2beed54449c2d3afb 100755 (executable)
@@ -86,12 +86,13 @@ sub watchman_query {
        # recency index to select candidate nodes and "fields" to limit the
        # output to file names only. Then we're using the "expression" term to
        # further constrain the results.
+       my $last_update_line = "";
        if (substr($last_update_token, 0, 1) eq "c") {
                $last_update_token = "\"$last_update_token\"";
+               $last_update_line = qq[\n"since": $last_update_token,];
        }
        my $query = <<" END";
-               ["query", "$git_work_tree", {
-                       "since": $last_update_token,
+               ["query", "$git_work_tree", {$last_update_line
                        "fields": ["name"],
                        "expression": ["not", ["dirname", ".git"]]
                }]