Class: Yast::PackagesProposalClass
- Inherits:
-
Module
- Object
- Module
- Yast::PackagesProposalClass
- Includes:
- Logger
- Defined in:
- library/general/src/modules/PackagesProposal.rb
Overview
API for selecting or de-selecting packages or patterns for installation. It stores two separate lists, one for required resolvables and the other one for optional resolvables. The optional resolvables can be deselected by user manually and the installation proposal will not complain that they are missing.
Instance Method Summary collapse
-
#AddResolvables(unique_id, type, resolvables, optional: false) ⇒ Boolean
Adds list of resolvables to pool that is then used by software proposal to propose a selection of resolvables to install.
-
#AddTaboos(unique_id, type, resolvables) ⇒ Boolean
Adds a list of resolvables to not be installed.
-
#CheckParams(unique_id, type) ⇒ Boolean
Checks parameters for global functions.
-
#GetAllResolvables(type, optional: false) ⇒ Array<String>
Returns list of selected resolvables of a given type.
-
#GetAllResolvablesForAllTypes(optional: false) ⇒ Hash{Symbol => Array<String>}
Returns all selected resolvables for all supported types.
-
#GetAllTaboos(type) ⇒ Array<String>
Returns the full list of taboos.
-
#GetResolvables(unique_id, type, optional: false) ⇒ Array<String>
Of resolvables.
-
#GetSupportedResolvables ⇒ Array<Symbol>
Returns list of resolvables currently supported by this module.
-
#GetTaboos(unique_id, type) ⇒ Array<String>
Returns the list of taboos for a ID.
- #IsSupportedResolvableType(type) ⇒ Object
-
#IsUniqueID(unique_id) ⇒ Boolean
Returns true/false indicating whether the ID is already in use.
- #main ⇒ Object
-
#RemoveResolvables(unique_id, type, resolvables, optional: false) ⇒ Boolean
Removes list of packages from pool that is then used by software proposal to propose a selection of resolvables to install.
-
#RemoveTaboos(unique_id, type, resolvables) ⇒ Boolean
Removes a resolvables from the list of taboos.
-
#ResetAll ⇒ Object
Resets all resolvables to install (both required and optional).
-
#SetResolvables(unique_id, type, resolvables, optional: false) ⇒ Boolean
Replaces the current resolvables with new ones.
-
#SetTaboos(unique_id, type, resolvables) ⇒ Boolean
Sets the taboos list for a given unique_id.
Instance Method Details
#AddResolvables(unique_id, type, resolvables, optional: false) ⇒ Boolean
Adds list of resolvables to pool that is then used by software proposal to propose a selection of resolvables to install.
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'library/general/src/modules/PackagesProposal.rb', line 118 def AddResolvables(unique_id, type, resolvables, optional: false) resolvables = deep_copy(resolvables) return false if !CheckParams(unique_id, type) if resolvables.nil? log.info("Using empty list instead of nil") resolvables = [] end log.info("Adding #{log_label(optional)} #{resolvables.inspect} of type #{type} for #{unique_id}") current_resolvables = data_for(unique_id, type, data(optional)) current_resolvables.concat(resolvables) true end |
#AddTaboos(unique_id, type, resolvables) ⇒ Boolean
Adds a list of resolvables to not be installed
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'library/general/src/modules/PackagesProposal.rb', line 203 def AddTaboos(unique_id, type, resolvables) return false if !CheckParams(unique_id, type) log.info("Taboo #{resolvables.inspect} for #{unique_id}}") # Remove the resolvable from the list of resolvables to install.... RemoveResolvables(unique_id, type, resolvables) # ... and from the optional list too RemoveResolvables(unique_id, type, resolvables, optional: true) data_for(unique_id, type, @taboos).concat(resolvables) log.info("Adding taboos #{resolvables.inspect} of type #{type} for #{unique_id}") true end |
#CheckParams(unique_id, type) ⇒ Boolean
Checks parameters for global functions
87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'library/general/src/modules/PackagesProposal.rb', line 87 def CheckParams(unique_id, type) if unique_id.nil? || unique_id == "" log.error("Unique ID cannot be: #{unique_id.inspect}") return false end if !IsSupportedResolvableType(type) log.error("Not a supported type: #{type}") return false end true end |
#GetAllResolvables(type, optional: false) ⇒ Array<String>
Returns list of selected resolvables of a given type
305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 |
# File 'library/general/src/modules/PackagesProposal.rb', line 305 def GetAllResolvables(type, optional: false) if !IsSupportedResolvableType(type) log.error("Not a supported type: #{type}, supported are only: #{@supported_resolvables}") return nil end ret = [] data(optional).each_value do |resolvables| ret.concat(resolvables[type]) if resolvables.key?(type) end # sort the result and remove the duplicates ret.sort! ret.uniq! ret end |
#GetAllResolvablesForAllTypes(optional: false) ⇒ Hash{Symbol => Array<String>}
Returns all selected resolvables for all supported types
Structure:
$[
`resolvable_type : [ "list", "of", "resolvables" ],
`another_type : [ "list", "of", "resolvables" ],
]
// No resolvables selected
GetAllResolvablesForAllTypes() -> $[]
// Only patterns selected
GetAllResolvablesForAllTypes() -> $[pattern : ["some", "patterns"]]
// Also packages selected
GetAllResolvablesForAllTypes() -> $[
pattern : ["some", "patterns"],
`package : ["some", "packages"],
]
347 348 349 350 351 352 353 354 355 356 |
# File 'library/general/src/modules/PackagesProposal.rb', line 347 def GetAllResolvablesForAllTypes(optional: false) ret = {} GetSupportedResolvables().each do |one_type| resolvables = GetAllResolvables(one_type, optional: optional) ret[one_type] = resolvables if !resolvables.nil? && !resolvables.empty? end ret end |
#GetAllTaboos(type) ⇒ Array<String>
Returns the full list of taboos
266 267 268 269 270 271 272 |
# File 'library/general/src/modules/PackagesProposal.rb', line 266 def GetAllTaboos(type) all_taboos = @taboos.values.each_with_object([]) do |tab, all| all.concat(tab[type]) if tab.key?(type) end all_taboos.sort.uniq end |
#GetResolvables(unique_id, type, optional: false) ⇒ Array<String>
Returns of resolvables.
285 286 287 288 289 |
# File 'library/general/src/modules/PackagesProposal.rb', line 285 def GetResolvables(unique_id, type, optional: false) return nil if !CheckParams(unique_id, type) data(optional).fetch(unique_id, {}).fetch(type, []) end |
#GetSupportedResolvables ⇒ Array<Symbol>
Returns list of resolvables currently supported by this module.
72 73 74 |
# File 'library/general/src/modules/PackagesProposal.rb', line 72 def GetSupportedResolvables @supported_resolvables end |
#GetTaboos(unique_id, type) ⇒ Array<String>
Returns the list of taboos for a ID
256 257 258 259 260 |
# File 'library/general/src/modules/PackagesProposal.rb', line 256 def GetTaboos(unique_id, type) return [] unless @taboos.dig(unique_id, type) data_for(unique_id, type, @taboos) end |
#IsSupportedResolvableType(type) ⇒ Object
76 77 78 79 80 |
# File 'library/general/src/modules/PackagesProposal.rb', line 76 def IsSupportedResolvableType(type) log.warn("Type cannot be nil") if type.nil? @supported_resolvables.include?(type) end |
#IsUniqueID(unique_id) ⇒ Boolean
Returns true/false indicating whether the ID is already in use.
362 363 364 365 366 367 368 369 370 371 |
# File 'library/general/src/modules/PackagesProposal.rb', line 362 def IsUniqueID(unique_id) if unique_id.nil? || unique_id == "" log.error("Unique ID cannot be #{unique_id.inspect}") return nil end !@resolvables_to_install.key?(unique_id) && !@opt_resolvables_to_install.key?(unique_id) && !@taboos.key?(unique_id) end |
#main ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'library/general/src/modules/PackagesProposal.rb', line 34 def main textdomain "base" # # **Structure:** # # $[ # "unique_ID" : $[ # `package : [ "list", "of", "packages", "to", "install" ], # `pattern : [ "list", "of", "patterns", "to", "install" ], # ] # ] @resolvables_to_install = {} # the same as above but the resolvables are considered optional @opt_resolvables_to_install = {} # resolvables to remove @taboos = {} # List of currently supported types of resolvables @supported_resolvables = [:package, :pattern] end |
#RemoveResolvables(unique_id, type, resolvables, optional: false) ⇒ Boolean
Removes list of packages from pool that is then used by software proposal to propose a selection of resolvables to install.
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'library/general/src/modules/PackagesProposal.rb', line 177 def RemoveResolvables(unique_id, type, resolvables, optional: false) resolvables = deep_copy(resolvables) return false if !CheckParams(unique_id, type) if resolvables.nil? log.warn("Using empty list instead of nil") resolvables = [] end log.info("Removing #{log_label(optional)} #{resolvables.inspect} " \ "type #{type} for #{unique_id}") current_resolvables = data_for(unique_id, type, data(optional)) current_resolvables.reject! { |r| resolvables.include?(r) } log.info("#{log_label(optional)} left: #{current_resolvables.inspect}") true end |
#RemoveTaboos(unique_id, type, resolvables) ⇒ Boolean
Removes a resolvables from the list of taboos
240 241 242 243 244 245 246 247 248 249 |
# File 'library/general/src/modules/PackagesProposal.rb', line 240 def RemoveTaboos(unique_id, type, resolvables) return false if !CheckParams(unique_id, type) current_taboos = data_for(unique_id, type, @taboos) current_taboos.reject! { |r| resolvables.include?(r) } log.info("Removing taboos #{resolvables.inspect} type #{type} for #{unique_id}") true end |
#ResetAll ⇒ Object
Resets all resolvables to install (both required and optional). Use carefully.
57 58 59 60 61 62 63 64 65 |
# File 'library/general/src/modules/PackagesProposal.rb', line 57 def ResetAll log.info("Resetting all PackagesProposal items") @resolvables_to_install.clear @opt_resolvables_to_install.clear @taboos.clear nil end |
#SetResolvables(unique_id, type, resolvables, optional: false) ⇒ Boolean
Replaces the current resolvables with new ones. Similar to AddResolvables() but it replaces the list of resolvables instead of adding them to the pool. It always replaces only the part that is identified by the unique_id.
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'library/general/src/modules/PackagesProposal.rb', line 145 def SetResolvables(unique_id, type, resolvables, optional: false) resolvables = deep_copy(resolvables) return false if !CheckParams(unique_id, type) if resolvables.nil? log.warn("Using empty list instead of nil") resolvables = [] end log.info("Setting #{log_label(optional)} #{resolvables} of type #{type} for #{unique_id}") current_resolvables = data_for(unique_id, type, data(optional)) current_resolvables.replace(resolvables) true end |
#SetTaboos(unique_id, type, resolvables) ⇒ Boolean
Sets the taboos list for a given unique_id
225 226 227 228 229 230 231 232 |
# File 'library/general/src/modules/PackagesProposal.rb', line 225 def SetTaboos(unique_id, type, resolvables) return false if !CheckParams(unique_id, type) current_taboos = data_for(unique_id, type, @taboos) current_taboos.replace(resolvables) true end |