nodejs/node · error · Exception
%s is not a proper inspector_protocol checkout: %s
Error message
%s is not a proper inspector_protocol checkout: %s
What it means
roll.py verifies the upstream directory is genuinely a clone of the official inspector_protocol repo by checking `git config --get remote.origin.url`. Anything other than https://chromium.googlesource.com/deps/inspector_protocol.git is rejected, so files are never rolled from an unrelated tree.
Source
Thrown at tools/inspector_protocol/roll.py:54
if p.returncode != 0:
raise Exception('%s: exit status %d', str(cmd), p.returncode)
return stdoutdata.decode('utf-8')
def CheckRepoIsClean(path):
os.chdir(path) # As a side effect this also checks for existence of the dir.
# If path isn't a git repo, this will throw and exception.
# And if it is a git repo and 'git status' has anything interesting to say,
# then it's not clean (uncommitted files etc.)
if len(RunCmd(['git', 'status', '--porcelain'])) != 0:
raise Exception('%s is not a clean git repo (run git status)' % path)
def CheckRepoIsInspectorProtocolCheckout(path):
os.chdir(path)
revision = RunCmd(['git', 'config', '--get', 'remote.origin.url']).strip()
if (revision != 'https://chromium.googlesource.com/deps/inspector_protocol.git'):
raise Exception('%s is not a proper inspector_protocol checkout: %s' % (path, revision))
def FindFilesToSyncIn(path):
files = []
for f in FILES_TO_SYNC:
files += glob.glob(os.path.join(path, f))
files = [os.path.relpath(f, path) for f in files]
return files
def FilesAreEqual(path1, path2):
# We check for permissions (useful for executable scripts) and contents.
return (os.stat(path1).st_mode == os.stat(path2).st_mode and
open(path1).read() == open(path2).read())
def ReadV8IPRevision(node_src_path):
lines = open(os.path.join(node_src_path, 'deps/v8/third_party/inspector_protocol/README.v8')).readlines()View on GitHub (pinned to 1b2de5e052)
Solutions
- Clone the official repo: `git clone https://chromium.googlesource.com/deps/inspector_protocol.git ~/ip/src`.
- Repoint the existing checkout's origin: `git -C <upstream> remote set-url origin https://chromium.googlesource.com/deps/inspector_protocol.git`.
- Supply --ip_src_upstream pointing at that correct checkout.
Example fix
// before python tools/inspector_protocol/roll.py --ip_src_upstream ~/my-fork // after git clone https://chromium.googlesource.com/deps/inspector_protocol.git ~/ip/src python tools/inspector_protocol/roll.py --ip_src_upstream ~/ip/src
Defensive patterns
Strategy: validation
Validate before calling
import subprocess
OFFICIAL='https://chromium.googlesource.com/deps/inspector_protocol.git'
url=subprocess.run(['git','-C',ip_src,'config','--get','remote.origin.url'],
capture_output=True,text=True).stdout.strip()
assert url==OFFICIAL, f'origin is {url!r}' Prevention
- Always clone the upstream from the official googlesource URL.
- Keep a dedicated ip clone; do not reuse a fork for rolling.
When it happens
Trigger: Passing --ip_src_upstream that points at a fork, a mirror, the node tree itself, or any repo whose origin URL differs from the official chromium URL.
Common situations: Using a personal fork for experimentation; cloning from a GitHub mirror; passing the wrong directory by mistake; the checkout's origin was rewritten.
Related errors
- %s: exit status %d
- %s is not a clean git repo (run git status)
- No V8 inspector protocol revision found
- No Node inspector protocol revision found
- Install git and ensure it's in your PATH.
AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13).
Data as JSON: /api/errors/3d4da0d7dd603930.
Report an issue: GitHub.