# Buggy code
def _build(
    self, nodes_by_level, keep_build, root_node, graph_info, remotes, build_mode, update
):
    using_build_profile = bool(graph_info.profile_build)
    missing, downloads = self._classify(nodes_by_level)
    self._raise_missing(missing)
    processed_package_refs = set()
    self._download(downloads, processed_package_refs)

    for level in nodes_by_level:
        for node in level:
            ref, conan_file = node.ref, node.conanfile
            output = conan_file.output

            self._propagate_info(node, using_build_profile)
            if node.binary == BINARY_EDITABLE:
                self._handle_node_editable(node, graph_info)
                # Need a temporary package revision for package_revision_mode
                # Cannot be PREV_UNKNOWN otherwise the consumers can't compute their packageID
                node.prev = "editable"
            else:
                if node.binary == BINARY_SKIP:  # Privates not necessary
                    continue
                assert ref.revision is not None, "Installer should receive RREV always"
                if node.binary == BINARY_UNKNOWN:
                    self._binaries_analyzer.reevaluate_node(
                        node, remotes, build_mode, update
                    )
                _handle_system_requirements(conan_file, node.pref, self._cache, output)
                self._handle_node_cache(
                    node, keep_build, processed_package_refs, remotes
                )

    # Finally, propagate information to root node (ref=None)
    self._propagate_info(root_node, using_build_profile)


# Traceback (TypeError)
30-Apr-2020 16:37:19 xyz/abc: Unknown binary for xyz/abc, computing updated ID
30-Apr-2020 16:37:19 Traceback (most recent call last):
30-Apr-2020 16:37:19 File "conan/conans/client/command.py", line 2002, in run
30-Apr-2020 16:37:19 File "conan/conans/client/command.py", line 369, in create
30-Apr-2020 16:37:19 File "conan/conans/client/conan_api.py", line 89, in wrapper
30-Apr-2020 16:37:19 File "conan/conans/client/conan_api.py", line 368, in create
30-Apr-2020 16:37:19 File "conan/conans/client/cmd/create.py", line 57, in create
30-Apr-2020 16:37:19 File "conan/conans/client/manager.py", line 75, in deps_install
30-Apr-2020 16:37:19 File "conan/conans/client/installer.py", line 309, in install
30-Apr-2020 16:37:19 File "conan/conans/client/installer.py", line 404, in _build
30-Apr-2020 16:37:19 File "conan/conans/client/graph/graph_binaries.py", line 347, in reevaluate_node
30-Apr-2020 16:37:19 File "conan/conans/client/graph/graph_binaries.py", line 319, in _compute_package_id
30-Apr-2020 16:37:19 File "conan/conans/model/info.py", line 540, in package_id
30-Apr-2020 16:37:19 File "conan/conans/model/info.py", line 216, in sha
30-Apr-2020 16:37:19 TypeError: '<' not supported between instances of 'NoneType' and 'str'

# Fixed code
def _build(
    self, nodes_by_level, keep_build, root_node, graph_info, remotes, build_mode, update
):
    using_build_profile = bool(graph_info.profile_build)
    missing, downloads = self._classify(nodes_by_level)
    self._raise_missing(missing)
    processed_package_refs = set()
    self._download(downloads, processed_package_refs)
    fix_package_id = self._cache.config.full_transitive_package_id

    for level in nodes_by_level:
        for node in level:
            ref, conan_file = node.ref, node.conanfile
            output = conan_file.output

            self._propagate_info(node, using_build_profile, fix_package_id)
            if node.binary == BINARY_EDITABLE:
                self._handle_node_editable(node, graph_info)
                # Need a temporary package revision for package_revision_mode
                # Cannot be PREV_UNKNOWN otherwise the consumers can't compute their packageID
                node.prev = "editable"
            else:
                if node.binary == BINARY_SKIP:  # Privates not necessary
                    continue
                assert ref.revision is not None, "Installer should receive RREV always"
                if node.binary == BINARY_UNKNOWN:
                    self._binaries_analyzer.reevaluate_node(
                        node, remotes, build_mode, update
                    )
                _handle_system_requirements(conan_file, node.pref, self._cache, output)
                self._handle_node_cache(
                    node, keep_build, processed_package_refs, remotes
                )

    # Finally, propagate information to root node (ref=None)
    self._propagate_info(root_node, using_build_profile, fix_package_id)