nodejs/node · error · MBErr

Can not specific both -c/--config and -m/--builder-group or

Error message

Can not specific both -c/--config and -m/--builder-group or -b/--builder

What it means

ConfigFromArgs() enforces mutual exclusivity: if -c/--config is given together with -m/--builder-group OR -b/--builder, it raises MBErr. A config can be specified either by name (-c) or by (builder_group, builder) pair, not both. (Note the message typo 'specific' for 'specify' is in the upstream source.)

Source

Thrown at deps/v8/tools/mb/mb.py:598

    isolate_maps = {}
    for isolate_map in self.args.isolate_map_files:
      try:
        isolate_map = ast.literal_eval(self.ReadFile(isolate_map))
        duplicates = set(isolate_map).intersection(isolate_maps)
        if duplicates:
          raise MBErr(
              'Duplicate targets in isolate map files: %s.' %
              ', '.join(duplicates))
        isolate_maps.update(isolate_map)
      except SyntaxError as e:
        raise MBErr('Failed to parse isolate map file "%s": %s' %
                    (isolate_map, e)) from e
    return isolate_maps

  def ConfigFromArgs(self):
    if self.args.config:
      if self.args.builder_group or self.args.builder:
        raise MBErr(
          'Can not specific both -c/--config and -m/--builder-group or '
          '-b/--builder')

      return self.args.config

    if not self.args.builder_group or not self.args.builder:
      raise MBErr('Must specify either -c/--config or '
                  '(-m/--builder-group and -b/--builder)')

    if not self.args.builder_group in self.builder_groups:
      raise MBErr('Builder groups name "%s" not found in "%s"' %
                  (self.args.builder_group, self.args.config_file))

    config = _v8_builder_fallback(
        self.args.builder, self.builder_groups[self.args.builder_group])

    if not config:
      raise MBErr(

View on GitHub (pinned to 1b2de5e052)

Solutions

  1. Choose one selection mode: either `-c <config>` alone, or `-m <group> -b <builder>` together — drop the other flags.
  2. Audit the wrapper script / CI recipe to pass only the selection flags appropriate to the mode.

Example fix

// before
  mb.py gen -c x64.release -m tryserver.v8 -b "V8 Linux" out/Default
// after
  mb.py gen -c x64.release out/Default
Defensive patterns

Strategy: validation

Validate before calling

if args.config and (args.builder_group or args.builder):
    sys.exit('Pass either -c/--config OR (-m/--builder-group and -b/--builder), not both')

Type guard

null

Try / catch

null

Prevention

When it happens

Trigger: A command line such as `mb.py gen -c x64.release -m tryserver.v8 -b "V8 Linux" out/Default` sets both -c and (-m or -b), tripping the guard at the top of ConfigFromArgs().

Common situations: Copy-pasting a CI command that used -m/-b and adding -c; wrapping mb.py in a script that always passes all flags; misunderstanding that -c and -m/-b are alternative selection modes.

Related errors


AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13). Data as JSON: /api/errors/a12a3f8f5edfda13. Report an issue: GitHub.