Unable to spawn process

Open
#647 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
38/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
lua

Research direction

Start in lua/plenary/job.lua at Job:_execute and inspect how options.cwd is passed to uv.spawn. Reproduce the failure from a Neovim terminal buffer with a term:// cwd, then determine the intended handling for a nonexistent directory; done means process spawning no longer fails for that case without breaking valid working directories.

Written by the indexing model from the issue text.

Description

I kept seeing an error coming from this library when using my nvim setup. The issue is that special buffers like nvim's terminal report a invalid cwd term:///path/to/file which causes the call to spawn to fail with some error. I have been able to trace down a solution that works for me in the following diff. I doubt this code is acceptable for this project, but I'm sharing since it works for me.

diff --git a/lua/plenary/job.lua b/lua/plenary/job.lua
index 7f54971..4c69e48 100644
--- a/lua/plenary/job.lua
+++ b/lua/plenary/job.lua
@@ -400,7 +400,23 @@ function Job:_execute()
     self:_user_on_start()
   end

-  self.handle, self.pid = uv.spawn(options.command, options, shutdown_factory(self, options))
+  local spawnOptions = {}
+
+  for k, v in pairs(options) do
+    spawnOptions[k] = v
+  end
+
+  if spawnOptions.cwd then
+    local stat = uv.fs_stat(spawnOptions.cwd)
+    if not stat or stat.type ~= "directory" then
+      -- Directory doesn't exist, remove cwd from options
+      spawnOptions.cwd = nil
+    end
+  end
+
+  self.handle, self.pid = uv.spawn(spawnOptions.command, spawnOptions, shutdown_factory(self, spawnOptions))

   if not self.handle then
     error(debug.traceback("Failed to spawn process: " .. vim.inspect(self)))
Dominant language
Lua
Stars
3.5k
Forks
340
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from nvim-lua/plenary.nvim

All issues in nvim-lua/plenary.nvim

Similar issues

More Lua issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.