# # Copyright (C) 2018 Bloomberg LP # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library. If not, see . # # Authors: # Tristan Van Berkom # Jim MacArthur # Benjamin Schubert """ Foundation types ================ """ from enum import Enum import heapq class Scope(Enum): """Defines the scope of dependencies to include for a given element when iterating over the dependency graph in APIs like :func:`Element.dependencies() ` """ ALL = 1 """All elements which the given element depends on, following all elements required for building. Including the element itself. """ BUILD = 2 """All elements required for building the element, including their respective run dependencies. Not including the given element itself. """ RUN = 3 """All elements required for running the element. Including the element itself. """ NONE = 4 """Just the element itself, no dependencies. *Since: 1.4* """ class Consistency(): """Defines the various consistency states of a :class:`.Source`. """ INCONSISTENT = 0 """Inconsistent Inconsistent sources have no explicit reference set. They cannot produce a cache key, be fetched or staged. They can only be tracked. """ RESOLVED = 1 """Resolved Resolved sources have a reference and can produce a cache key and be fetched, however they cannot be staged. """ CACHED = 2 """Cached Sources have a cached unstaged copy in the source directory. """ class CoreWarnings(): """CoreWarnings() Some common warnings which are raised by core functionalities within BuildStream are found in this class. """ OVERLAPS = "overlaps" """ This warning will be produced when buildstream detects an overlap on an element which is not whitelisted. See :ref:`Overlap Whitelist ` """ REF_NOT_IN_TRACK = "ref-not-in-track" """ This warning will be produced when a source is configured with a reference which is found to be invalid based on the configured track """ BAD_ELEMENT_SUFFIX = "bad-element-suffix" """ This warning will be produced when an element whose name does not end in .bst is referenced either on the command line or by another element """ BAD_CHARACTERS_IN_NAME = "bad-characters-in-name" """ This warning will be produces when filename for a target contains invalid characters in its name. """ # _KeyStrength(): # # Strength of cache key # class _KeyStrength(Enum): # Includes strong cache keys of all build dependencies and their # runtime dependencies. STRONG = 1 # Includes names of direct build dependencies but does not include # cache keys of dependencies. WEAK = 2 # _UniquePriorityQueue(): # # Implements a priority queue that adds only each key once. # # The queue will store and priority based on a tuple (key, item). # class _UniquePriorityQueue: def __init__(self): self._items = set() self._heap = [] # push(): # # Push a new item in the queue. # # If the item is already present in the queue as identified by the key, # this is a noop. # # Args: # key (hashable, comparable): unique key to use for checking for # the object's existence and used for # ordering # item (any): item to push to the queue # def push(self, key, item): if key not in self._items: self._items.add(key) heapq.heappush(self._heap, (key, item)) # pop(): # # Pop the next item from the queue, by priority order. # # Returns: # (any): the next item # # Throw: # IndexError: when the list is empty # def pop(self): key, item = heapq.heappop(self._heap) self._items.remove(key) return item def __len__(self): return len(self._heap)