def add(self, pkgList): """Given a list of lines from the input file, strip off any leading symbols and add the result to the appropriate list. """ existingExcludedSet = OrderedSet(self.excludedList) existingPackageSet = OrderedSet(self.packageList) newExcludedSet = OrderedSet() newPackageSet = OrderedSet() excludedGroupList = [] for pkg in pkgList: stripped = pkg.strip() if stripped[0:2] == "@^": self.environment = stripped[2:] elif stripped[0] == "@": self._processGroup(stripped[1:]) elif stripped[0] == "-": if stripped[1:3] == "@^" and self.environment == stripped[3:]: self.environment = None elif stripped[1] == "@": excludedGroupList.append(Group(name=stripped[2:])) else: newExcludedSet.add(stripped[1:]) else: newPackageSet.add(stripped) # Groups have to be excluded in two different ways (note: can't use # sets here because we have to store objects): excludedGroupNames = [g.name for g in excludedGroupList] # First, an excluded group may be cancelling out a previously given # one. This is often the case when using %include. So there we should # just remove the group from the list. self.groupList = [ g for g in self.groupList if g.name not in excludedGroupNames ] # Second, the package list could have included globs which are not # processed by pykickstart. In that case we need to preserve a list of # excluded groups so whatever tool doing package/group installation can # take appropriate action. self.excludedGroupList.extend(excludedGroupList) existingPackageSet = (existingPackageSet - newExcludedSet) | newPackageSet existingExcludedSet = (existingExcludedSet - existingPackageSet) | newExcludedSet self.packageList = list(existingPackageSet) self.excludedList = list(existingExcludedSet)
def add (self, pkgList): # type: (Packages, List[str]) -> None """Given a list of lines from the input file, strip off any leading symbols and add the result to the appropriate list. """ existingExcludedSet = OrderedSet(self.excludedList) existingPackageSet = OrderedSet(self.packageList) newExcludedSet = OrderedSet() newPackageSet = OrderedSet() excludedGroupList = [] for pkg in pkgList: stripped = pkg.strip() if stripped[0:2] == "@^": self.environment = stripped[2:] elif stripped[0] == "@": self._processGroup(stripped[1:]) elif stripped[0] == "-": if stripped[1:3] == "@^" and self.environment == stripped[3:]: self.environment = None elif stripped[1] == "@": excludedGroupList.append(Group(name=stripped[2:])) else: newExcludedSet.add(stripped[1:]) else: newPackageSet.add(stripped) # Groups have to be excluded in two different ways (note: can't use # sets here because we have to store objects): excludedGroupNames = [g.name for g in excludedGroupList] # First, an excluded group may be cancelling out a previously given # one. This is often the case when using %include. So there we should # just remove the group from the list. self.groupList = [g for g in self.groupList if g.name not in excludedGroupNames] # Second, the package list could have included globs which are not # processed by pykickstart. In that case we need to preserve a list of # excluded groups so whatever tool doing package/group installation can # take appropriate action. self.excludedGroupList.extend(excludedGroupList) existingPackageSet = (existingPackageSet - newExcludedSet) | newPackageSet existingExcludedSet = (existingExcludedSet - existingPackageSet) | newExcludedSet # FIXME: figure these types out self.packageList = list(existingPackageSet) # type: ignore self.excludedList = list(existingExcludedSet) # type: ignore
def runTest(self): # __eq__, __len__, etc. self.assertEqual(OrderedSet([]), OrderedSet([])) self.assertEqual(OrderedSet([1, 2, 3]), OrderedSet([1, 2, 3])) self.assertEqual(OrderedSet([1, 2, 3]), [1, 2, 3]) # __reversed__ self.assertEqual(reversed(OrderedSet([2, 4, 1, 3])), OrderedSet([3, 1, 4, 2])) # discard self.assertEqual(len(OrderedSet(["one", "two", "three"])), 3) os = OrderedSet(["one", "two", "three"]) os.discard("two") self.assertEqual(len(os), 2) os = OrderedSet(["one", "two", "three"]) os.discard("four") self.assertEqual(len(os), 3) # add self.assertEqual(len(OrderedSet(["one", "two", "three"])), 3) os = OrderedSet(["one", "two", "three"]) os.add("two") self.assertEqual(len(os), 3) os = OrderedSet(["one", "two", "three"]) os.add("four") self.assertEqual(len(os), 4) # pop self.assertRaises(KeyError, OrderedSet().pop) self.assertEqual(OrderedSet(["one", "two", "three"]).pop(), "three") self.assertEqual(OrderedSet(["one"]).pop(), "one") os = OrderedSet(["one"]) os.pop() self.assertEqual(len(os), 0) # __repr__ self.assertEqual(repr(OrderedSet()), "OrderedSet()") self.assertEqual(repr(OrderedSet([1, 2, 3])), "OrderedSet([1, 2, 3])")