Class: Y2Packager::Repository
- Inherits:
-
Object
- Object
- Y2Packager::Repository
- Defined in:
- library/packages/src/lib/y2packager/repository.rb
Overview
This class represents a libzypp repository
It offers a simple API to list them, query basic attributes, find out the products they offer and enabling/disabling them.
Defined Under Namespace
Classes: NotFound
Instance Attribute Summary collapse
-
#name ⇒ String
readonly
Repository name.
-
#product_dir ⇒ String
readonly
Product directory.
-
#raw_url ⇒ ZyppUrl
Repository URL.
-
#repo_alias ⇒ String
readonly
Repository alias.
-
#repo_id ⇒ Fixnum
readonly
Repository ID.
Class Method Summary collapse
-
.all(enabled_only: false) ⇒ Array<Repository>
Return all registered repositories.
-
.create(name:, url:, product_dir: "", enabled: true, autorefresh: true) ⇒ Y2Packager::Repository?
Add a repository.
-
.disabled ⇒ Array<Repository>
Return only disabled repositories.
-
.enabled ⇒ Array<Repository>
Return only enabled repositories.
-
.find(repo_id) ⇒ Y2Packager::Repository
Return a repository with the given repo_id.
Instance Method Summary collapse
-
#addons ⇒ Array<Y2Packager::Product>
Return addons in the repository.
-
#autorefresh? ⇒ Boolean
Determine if auto-refresh is enabled for the repository.
-
#delete! ⇒ Boolean
Remove the repository, the repo_id is set to
nil
after removal. -
#disable! ⇒ Boolean
Disable the repository.
-
#enable! ⇒ Boolean
Enable the repository.
-
#enabled? ⇒ Boolean
Determine if the repository is enabled.
-
#initialize(repo_id:, repo_alias:, name:, url:, enabled:, autorefresh:, raw_url: nil, product_dir: "") ⇒ Repository
constructor
Constructor.
-
#local? ⇒ Boolean
Determine if the repository is local.
-
#products ⇒ Array<Y2Packager::Product>
Return products contained in the repository.
-
#refresh(force: false) ⇒ Boolean
Refresh the repository metadata on disk.
-
#scheme ⇒ Symbol?
Return repository scheme.
-
#url ⇒ ZyppUrl
Repository URL, expanded version (ie. with the repository variables already replaced by their values).
Constructor Details
#initialize(repo_id:, repo_alias:, name:, url:, enabled:, autorefresh:, raw_url: nil, product_dir: "") ⇒ Repository
This class calculates the expanded URL (#url) out of the unexpanded version
Constructor
(#raw_url), so there is no need to provide both versions in the constructor. Still,
both :url
and :raw_url
are accepted for backwards compatibility. If :raw_url
is provided, :url
will be ignored (it can be calculated at any point).
133 134 135 136 137 138 139 140 141 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 133 def initialize(repo_id:, repo_alias:, name:, url:, enabled:, autorefresh:, raw_url: nil, product_dir: "") @repo_id = repo_id @repo_alias = repo_alias @name = name @enabled = enabled @autorefresh = autorefresh @raw_url = ZyppUrl.new(raw_url || url) @product_dir = product_dir end |
Instance Attribute Details
#name ⇒ String (readonly)
Returns Repository name.
43 44 45 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 43 def name @name end |
#product_dir ⇒ String (readonly)
Returns Product directory.
47 48 49 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 47 def product_dir @product_dir end |
#raw_url ⇒ ZyppUrl
Returns Repository URL.
45 46 47 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 45 def raw_url @raw_url end |
#repo_alias ⇒ String (readonly)
Returns Repository alias.
49 50 51 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 49 def repo_alias @repo_alias end |
#repo_id ⇒ Fixnum (readonly)
Returns Repository ID.
41 42 43 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 41 def repo_id @repo_id end |
Class Method Details
.all(enabled_only: false) ⇒ Array<Repository>
Return all registered repositories
65 66 67 68 69 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 65 def all(enabled_only: false) Yast::Pkg.SourceGetCurrent(enabled_only).map do |repo_id| find(repo_id) end end |
.create(name:, url:, product_dir: "", enabled: true, autorefresh: true) ⇒ Y2Packager::Repository?
Add a repository
108 109 110 111 112 113 114 115 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 108 def create(name:, url:, product_dir: "", enabled: true, autorefresh: true) repo_id = Yast::Pkg.RepositoryAdd( "name" => name, "base_urls" => [url.to_s], "enabled" => enabled, "autorefresh" => autorefresh, "prod_dir" => product_dir ) repo_id ? find(repo_id) : nil end |
.disabled ⇒ Array<Repository>
Return only disabled repositories
81 82 83 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 81 def disabled all.reject(&:enabled?) end |
.enabled ⇒ Array<Repository>
Return only enabled repositories
74 75 76 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 74 def enabled all.select(&:enabled?) end |
.find(repo_id) ⇒ Y2Packager::Repository
Return a repository with the given repo_id
91 92 93 94 95 96 97 98 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 91 def find(repo_id) repo_data = Yast::Pkg.SourceGeneralData(repo_id) raise NotFound if repo_data.nil? new(repo_id: repo_id, repo_alias: repo_data["alias"], enabled: repo_data["enabled"], name: repo_data["name"], autorefresh: repo_data["autorefresh"], url: repo_data["raw_url"], product_dir: repo_data["product_dir"]) end |
Instance Method Details
#addons ⇒ Array<Y2Packager::Product>
Return addons in the repository
204 205 206 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 204 def addons products.select { |p| p.category == :addon } end |
#autorefresh? ⇒ Boolean
Determine if auto-refresh is enabled for the repository
195 196 197 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 195 def autorefresh? @autorefresh end |
#delete! ⇒ Boolean
Remove the repository, the repo_id is set to nil
after removal.
The repository will be removed only in memory. Calling to Yast::Pkg.SourceSaveAll will make the removal persistent.
249 250 251 252 253 254 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 249 def delete! return false unless Yast::Pkg.SourceDelete(repo_id) @repo_id = nil true end |
#disable! ⇒ Boolean
Disable the repository
The repository status will be stored only in memory. Calling to Yast::Pkg.SourceSaveAll will make it persistent.
233 234 235 236 237 238 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 233 def disable! return false unless Yast::Pkg.SourceSetEnabled(repo_id, false) self.enabled = false true end |
#enable! ⇒ Boolean
Enable the repository
The repository status will be stored only in memory. Calling to Yast::Pkg.SourceSaveAll will make it persistent.
217 218 219 220 221 222 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 217 def enable! return false unless Yast::Pkg.SourceSetEnabled(repo_id, true) self.enabled = true true end |
#enabled? ⇒ Boolean
Determine if the repository is enabled
188 189 190 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 188 def enabled? @enabled end |
#local? ⇒ Boolean
Determine if the repository is local
173 174 175 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 173 def local? raw_url.local? end |
#products ⇒ Array<Y2Packager::Product>
Return products contained in the repository
157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 157 def products return @products if @products # Filter products from this repository candidates = Y2Packager::Resolvable.find(kind: :product, source: repo_id) # Build an array of Y2Packager::Product objects @products = candidates.map do |data| Y2Packager::Product.new(name: data.name, version: data.version, arch: data.arch, category: data.category, vendor: data.vendor) end end |
#refresh(force: false) ⇒ Boolean
Refresh the repository metadata on disk.
If the repository is loaded in memory you need to reload the repositories again to activate the changes.
During refresh the progress callbacks might be executed.
271 272 273 274 275 276 277 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 271 def refresh(force: false) if force Yast::Pkg.SourceForceRefreshNow(repo_id) else Yast::Pkg.SourceRefreshNow(repo_id) end end |
#scheme ⇒ Symbol?
Return repository scheme
The scheme is determined using the URL
148 149 150 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 148 def scheme raw_url&.scheme&.to_sym end |
#url ⇒ ZyppUrl
Repository URL, expanded version (ie. with the repository variables already replaced by their values)
181 182 183 |
# File 'library/packages/src/lib/y2packager/repository.rb', line 181 def url raw_url. end |