patch-package: error: Error: spawnSync git ENOBUFS

Small reproduction:

  1. Create an empty folder with only one file: package.json

    {
      "name": "rw",
      "dependencies": {
        "react-window": "1.8.5"
      }
    }
    
  2. Make some changes inside node_modules/react-window/dist files

  3. npx patch-package react-window

  4. If fails with error below:

[17:05:40] brunolemos:rw $ patch-package react-window
patch-package 6.1.2
• Creating temporary folder
• Installing react-window@1.8.5 with yarn
• Diffing your files with clean files

{
  error: Error: spawnSync git ENOBUFS
      at Object.spawnSync (internal/child_process.js:1041:20)
      at Object.spawnSync (child_process.js:607:24)
      at Function.spawnSync [as sync] (/usr/local/lib/node_modules/patch-package/node_modules/cross-spawn/index.js:26:23)
      at Object.exports.spawnSafeSync (/usr/local/lib/node_modules/patch-package/dist/spawnSafe.js:10:32)
      at git (/usr/local/lib/node_modules/patch-package/dist/makePatch.js:73:32)
      at Object.makePatch (/usr/local/lib/node_modules/patch-package/dist/makePatch.js:104:26)
      at /usr/local/lib/node_modules/patch-package/dist/index.js:48:25
      at Array.forEach (<anonymous>)
      at Object.<anonymous> (/usr/local/lib/node_modules/patch-package/dist/index.js:47:22)
      at Module._compile (internal/modules/cjs/loader.js:868:30) {
    errno: 'ENOBUFS',
    code: 'ENOBUFS',
    syscall: 'spawnSync git',
    path: 'git',
    spawnargs: [
      'diff',
      '--cached',
      '--no-color',
      '--ignore-space-at-eol',
      '--no-ext-diff'
    ]
  },
  status: null,
  signal: 'SIGTERM',
  output: [
    null,
    <Buffer 64 69 66 66 20 2d 2d 67 69 74 20 61 2f 6e 6f 64 65 5f 6d 6f 64 75 6c 65 73 2f 72 65 61 63 74 2d 77 69 6e 64 6f 77 2f 64 69 73 74 2f 69 6e 64 65 78 2d ... 1056718 more bytes>,
    <Buffer >
  ],
  pid: 79859,
  stdout: <Buffer 64 69 66 66 20 2d 2d 67 69 74 20 61 2f 6e 6f 64 65 5f 6d 6f 64 75 6c 65 73 2f 72 65 61 63 74 2d 77 69 6e 64 6f 77 2f 64 69 73 74 2f 69 6e 64 65 78 2d ... 1056718 more bytes>,
  stderr: <Buffer >
}

/usr/local/lib/node_modules/patch-package/dist/makePatch.js:150
        throw e;
        ^
{
  error: Error: spawnSync git ENOBUFS
      at Object.spawnSync (internal/child_process.js:1041:20)
      at Object.spawnSync (child_process.js:607:24)
      at Function.spawnSync [as sync] (/usr/local/lib/node_modules/patch-package/node_modules/cross-spawn/index.js:26:23)
      at Object.exports.spawnSafeSync (/usr/local/lib/node_modules/patch-package/dist/spawnSafe.js:10:32)
      at git (/usr/local/lib/node_modules/patch-package/dist/makePatch.js:73:32)
      at Object.makePatch (/usr/local/lib/node_modules/patch-package/dist/makePatch.js:104:26)
      at /usr/local/lib/node_modules/patch-package/dist/index.js:48:25
      at Array.forEach (<anonymous>)
      at Object.<anonymous> (/usr/local/lib/node_modules/patch-package/dist/index.js:47:22)
      at Module._compile (internal/modules/cjs/loader.js:868:30) {
    errno: 'ENOBUFS',
    code: 'ENOBUFS',
    syscall: 'spawnSync git',
    path: 'git',
    spawnargs: [
      'diff',
      '--cached',
      '--no-color',
      '--ignore-space-at-eol',
      '--no-ext-diff'
    ]
  },
  status: null,
  signal: 'SIGTERM',
  output: [
    null,
    <Buffer 64 69 66 66 20 2d 2d 67 69 74 20 61 2f 6e 6f 64 65 5f 6d 6f 64 75 6c 65 73 2f 72 65 61 63 74 2d 77 69 6e 64 6f 77 2f 64 69 73 74 2f 69 6e 64 65 78 2d ... 1056718 more bytes>,
    <Buffer >
  ],
  pid: 79859,
  stdout: <Buffer 64 69 66 66 20 2d 2d 67 69 74 20 61 2f 6e 6f 64 65 5f 6d 6f 64 75 6c 65 73 2f 72 65 61 63 74 2d 77 69 6e 64 6f 77 2f 64 69 73 74 2f 69 6e 64 65 78 2d ... 1056718 more bytes>,
  stderr: <Buffer >
}
[17:05:44] brunolemos:rw $ 

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Reactions: 5
  • Comments: 26 (3 by maintainers)

Commits related to this issue

Most upvoted comments

Thank you, this helped. So we now need to patch-package patch-package? 😉

@alepri51 I temporarily worked around it and managed to create my patch by going to:

⁨node_modules⁩/patch-package⁩/dist⁩/makePatch.js line 108, specifically in this code:

return spawnSafe_1.spawnSafeSync("git", args, {
                cwd: tmpRepo.name,
                env: { HOME: tmpRepo.name },
            });

and added an extra option called maxBuffer to increase the buffer size to 100mb (it was 1 mb by default which is too low)

now the code looks like this:

return spawnSafe_1.spawnSafeSync("git", args, {
                cwd: tmpRepo.name,
                env: { HOME: tmpRepo.name },
                maxBuffer: 1024 * 1024 * 100
            });

and my patch was created successfully. I hope that helps someone.

@alepri51 I temporarily worked around it and managed to create my patch by going to:

⁨node_modules⁩/patch-package⁩/dist⁩/makePatch.js line 108, specifically in this code:

return spawnSafe_1.spawnSafeSync("git", args, {
                cwd: tmpRepo.name,
                env: { HOME: tmpRepo.name },
            });

and added an extra option called maxBuffer to increase the buffer size to 100mb (it was 1 mb by default which is too low)

now the code looks like this:

return spawnSafe_1.spawnSafeSync("git", args, {
                cwd: tmpRepo.name,
                env: { HOME: tmpRepo.name },
                maxBuffer: 1024 * 1024 * 100
            });

and my patch was created successfully. I hope that helps someone.

Here is a gist with the patch by @SudoPlz I’m using successfully:

https://gist.github.com/brussee/e382ed12ca007a88170289e54b526063

Got it fixed by increasing maxBuffer to maxBuffer: 2048 * 1024 * 100

So we basically need to patch the patch-package first in order to use it to patch other packages…

Can we get this fixed, possibly by upping the default maxBuffer or throwing a more clear error suggesting to up the maxBuffer when running the command?

I just ran into this too, and while it is incredibly meta to have to patch patch-package, it’s not exactly the point 😉

A fix for this was just released in v6.4.5. Thanks to @nomi9995 for making the PR 🙏🏼

Still failing for me with 6.4.7

I also have the same problem with the version 8.0.0

This only happens when I was trying to patch the .js.map files as well. Maybe they are too big.

My patch-package version is 6.4.7 and maxBuffer: 1024 * 1024 * 100 already added in the makePatch file. I still get this error

To be honest if we raise maxBuffer to 2 mb it may fix everyone’s issue … just saying …

Hit this when trying to patch the three node_module. maxBuffer: 1024 * 1024 * 100 fixed it, thanks!

@Timebutt would it not be better to allow passing a maxBuffer param? There is a discussion of the same kind of problem in the Lerna repo here: https://github.com/lerna/lerna/issues/479

It would also be nice to know what the buffer defaults to.

This issue comes up quite often when patching react-native packages for older repos as they could have some post-install steps which generate a large number of files.

Happened for me with expo-modules-core with trying to apply the changes from this commit: https://github.com/expo/expo/pull/18518

Run into the same issue.

Artificially raising the maxBuffer seems to me a bit too much. I’d vote for cleaner message (“File too big: <path>. Please raise --maxBuffer to over <size>”) and option to change maxBuffer and optionally make it automatically adjust (check size of all files, if they are bigger than buffer than raise the bar before spawning git diff).