Skip to content

"Not in a git repo" returns #233

@bogorad

Description

@bogorad

fff.nvim find_in_git_root regression

Error

  • In a valid Git repository on Windows, running find_in_git_root() shows:
    • Not in a git repository

Cause

  • find_in_git_root() reads fuzzy.get_git_root() immediately.
  • get_git_root() depends on async initial scan state.
  • On startup, scan state can still be empty, so git_root is nil even in a repo.

Successful mitigation

  • Wait for initial scan before reading git root.
  • If scan is not ready or git_root is empty, fall back to:
    • git rev-parse --show-toplevel in current cwd.
  • This mitigation works in local testing.

Changed code

File: lua/fff/main.lua

function M.find_in_git_root()
  local fuzzy = require('fff.core').ensure_initialized()

  local wait_ok, scan_ready = pcall(fuzzy.wait_for_initial_scan, 5000)
  if not wait_ok then
    vim.notify('Failed to wait for initial scan', vim.log.levels.WARN)
  end

  local ok, git_root = pcall(fuzzy.get_git_root)

  if not scan_ready or not ok or not git_root or git_root == '' then
    local cwd = vim.fn.getcwd()
    local result = vim.system({ 'git', 'rev-parse', '--show-toplevel' }, { cwd = cwd, text = true }):wait()
    if result.code == 0 and result.stdout and result.stdout ~= '' then
      git_root = result.stdout:gsub('%s+$', '')
    end
  end

  if not git_root or git_root == '' then
    vim.notify('Not in a git repository', vim.log.levels.WARN)
    return
  end

  M.find_files_in_dir(git_root)
end

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions