# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2


class DependencyArg:

    __slots__ = ("arg", "force_reinstall", "internal", "reset_depth", "root_config")

    def __init__(
        self,
        arg=None,
        force_reinstall=False,
        internal=False,
        reset_depth=True,
        root_config=None,
    ):
        """
        Use reset_depth=False for special arguments that should not interact
        with depth calculations (see the emerge --deep=DEPTH option).
        """
        self.arg = arg
        self.force_reinstall = force_reinstall
        self.internal = internal
        self.reset_depth = reset_depth
        self.root_config = root_config

    def __eq__(self, other):
        if self.__class__ is not other.__class__:
            return False
        return self.arg == other.arg and self.root_config.root == other.root_config.root

    def __hash__(self):
        return hash((self.arg, self.root_config.root))

    def __str__(self):
        return "%s" % (self.arg,)
