Skip to content
Commit 064abe66 authored by Sam Thursfield's avatar Sam Thursfield Committed by Valentin David
Browse files

Fix crash when --debug is passed

I hit the following backtrace running `bst --debug push` and `bst
--debug build`:

    pid:16736 id:000[--:--:--][][] START   Push
    pid:16736 id:000[--:--:--][][] START   Loading pipeline
    pid:16736 id:000[00:00:00][][] SUCCESS Loading pipeline
    pid:16736 id:000[--:--:--][][] START   Resolving pipeline
    pid:16736 id:000[--:--:--][][] BUG     'MesonElement' object has no attribute '_Element__cache_key'

        Traceback (most recent call last):
          File "/home/sam/.local/bin/bst", line 8, in <module>
            sys.exit(cli())
          File "/home/sam/.local/lib/python3.6/site-packages/click/core.py", line 722, in __call__
            return self.main(*args, **kwargs)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_frontend/cli.py", line 162, in override_main
            standalone_mode=standalone_mode, **extra)
          File "/home/sam/.local/lib/python3.6/site-packages/click/core.py", line 697, in main
            rv = self.invoke(ctx)
          File "/home/sam/.local/lib/python3.6/site-packages/click/core.py", line 1066, in invoke
            return _process_result(sub_ctx.command.invoke(sub_ctx))
          File "/home/sam/.local/lib/python3.6/site-packages/click/core.py", line 895, in invoke
            return ctx.invoke(self.callback, **ctx.params)
          File "/home/sam/.local/lib/python3.6/site-packages/click/core.py", line 535, in invoke
            return callback(*args, **kwargs)
          File "/home/sam/.local/lib/python3.6/site-packages/click/decorators.py", line 27, in new_func
            return f(get_current_context().obj, *args, **kwargs)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_frontend/cli.py", line 471, in push
            app.stream.push(elements, selection=deps, remote=remote)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_stream.py", line 341, in push
            fetch_subprojects=True)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_stream.py", line 814, in _load
            fetch_subprojects=fetch_subprojects)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_pipeline.py", line 119, in load
            for meta in meta_elements
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_pipeline.py", line 119, in <listcomp>
            for meta in meta_elements
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/element.py", line 894, in _new_from_meta
            element = project.create_element(artifacts, meta)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_project.py", line 184, in create_element
            element = self._element_factory.create(self._context, self, artifacts, meta)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_elementfactory.py", line 57, in create
            return element_type(context, project, artifacts, meta, default_config)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/element.py", line 196, in __init__
            super().__init__(meta.name, context, project, meta.provenance, "element")
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/plugin.py", line 171, in __init__
            self.debug("Created: {}".format(self))
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/plugin.py", line 407, in debug
            self.__message(MessageType.DEBUG, brief, detail=detail)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/plugin.py", line 652, in __message
            self.__context.message(message)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_context.py", line 338, in message
            self._message_handler(message, context=self)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_frontend/app.py", line 665, in _message_handler
            text = self.logger.render(message)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_frontend/widget.py", line 585, in render
            return self._render(message)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_frontend/widget.py", line 620, in _render
            text += widget.render(message)
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/_frontend/widget.py", line 228, in render
            _, key, missing = plugin._get_display_key()
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/element.py", line 1138, in _get_display_key
            cache_key = self._get_cache_key()
          File "/home/sam/.local/lib/python3.6/site-packages/buildstream/element.py", line 991, in _get_cache_key
            return self.__cache_key
        AttributeError: 'MesonElement' object has no attribute '_Element__cache_key'

The issue here is that when `--debug` is enabled, Plugin.__init__()
tries to log a message like this:

        pid:16929 id:001[--:--:--][????????][ main:tracker.bst                   ] DEBUG   Created: meson element at tracker.bst [line 1 column 0]

The log formatter is trying to get the cache key of the element in
order to show it in the log, but the attribute hasn't yet been set
because we've not got to the Element() constructor.
parent 01850d55
Loading
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment