From d8f28cc795a387b1d32537b69a505406c3c7ba88 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Wed, 20 Sep 2023 09:15:53 +0200 Subject: [PATCH 1/6] remove performance testing method from ruby service --- .../bus/org.opensuse.Agama.Software1.bus.xml | 4 ---- rust/agama-lib/src/software/proxies.rs | 3 --- service/lib/agama/dbus/clients/software.rb | 9 --------- service/lib/agama/dbus/software/manager.rb | 5 ----- service/perf.rb | 20 ------------------- 5 files changed, 41 deletions(-) delete mode 100644 service/perf.rb diff --git a/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml b/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml index 9e5a062653..74fb5df917 100644 --- a/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml +++ b/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml @@ -31,10 +31,6 @@ - - - - diff --git a/rust/agama-lib/src/software/proxies.rs b/rust/agama-lib/src/software/proxies.rs index e76907008c..8803fce495 100644 --- a/rust/agama-lib/src/software/proxies.rs +++ b/rust/agama-lib/src/software/proxies.rs @@ -24,9 +24,6 @@ trait Software1 { /// Propose method fn propose(&self) -> zbus::Result<()>; - /// ProvisionSelected method - fn provision_selected(&self, provision: &str) -> zbus::Result; - /// ProvisionsSelected method fn provisions_selected(&self, provisions: &[&str]) -> zbus::Result>; diff --git a/service/lib/agama/dbus/clients/software.rb b/service/lib/agama/dbus/clients/software.rb index 194a84a977..8b953d705d 100644 --- a/service/lib/agama/dbus/clients/software.rb +++ b/service/lib/agama/dbus/clients/software.rb @@ -102,15 +102,6 @@ def finish dbus_object.Finish end - # Determine whether the given tag are provided by the selected packages - # - # @param tag [String] Tag to search for (package names, requires/provides, or file - # names) - # @return [Boolean] true if it is provided; false otherwise - def provision_selected?(tag) - dbus_object.ProvisionSelected(tag) - end - # Determine whether the given tags are provided by the selected packages # # @param tags [Array] Tags to search for (package names, requires/provides, or file diff --git a/service/lib/agama/dbus/software/manager.rb b/service/lib/agama/dbus/software/manager.rb index acabf7c7d6..47afd6bef4 100644 --- a/service/lib/agama/dbus/software/manager.rb +++ b/service/lib/agama/dbus/software/manager.rb @@ -75,11 +75,6 @@ def initialize(backend, logger) update_validation # as different product means different software selection end - # TODO: just for performance comparison (see `perf.rb`) - dbus_method :ProvisionSelected, "in Provision:s, out Result:b" do |provision| - backend.provision_selected?(provision) - end - dbus_method :ProvisionsSelected, "in Provisions:as, out Result:ab" do |provisions| [provisions.map { |p| backend.provision_selected?(p) }] end diff --git a/service/perf.rb b/service/perf.rb deleted file mode 100644 index 2974a36d3d..0000000000 --- a/service/perf.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -require "benchmark" - -$LOAD_PATH << File.expand_path("lib", __dir__) - -require "agama/dbus/clients/software" - -PACKAGES = ["autologin-support", "kdm", "gdm", "sddm", "lightdm"].freeze - -CLIENT = Agama::DBus::Clients::Software.new -# warm up call -CLIENT.provisions_selected?(PACKAGES) - -RUNS = 100 - -Benchmark.bm(15) do |x| - x.report("ask multi:") { RUNS.times { PACKAGES.each { |p| CLIENT.provision_selected?(p) } } } - x.report("single call:") { RUNS.times { CLIENT.provisions_selected?(PACKAGES) } } -end From 8ed23cea9a44edb7e7a09150dc839a1c901b0fc4 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Thu, 21 Sep 2023 10:40:03 +0200 Subject: [PATCH 2/6] add method to list patterns --- service/lib/agama/dbus/software/manager.rb | 16 ++++++++++++++++ service/lib/agama/software/manager.rb | 12 ++++++++++++ 2 files changed, 28 insertions(+) diff --git a/service/lib/agama/dbus/software/manager.rb b/service/lib/agama/dbus/software/manager.rb index 47afd6bef4..edb08962bd 100644 --- a/service/lib/agama/dbus/software/manager.rb +++ b/service/lib/agama/dbus/software/manager.rb @@ -75,6 +75,22 @@ def initialize(backend, logger) update_validation # as different product means different software selection end + # value of result hash is category, description, icon, summary and order + dbus_method :ListPatterns, "in Filtered:b, out Result:a{s(ssssi)}" do |filtered| + [ + backend.patterns(filtered).each_with_object({}) do |pattern, result| + value = [ + pattern.category, + pattern.description, + pattern.icon, + pattern.summary, + pattern.order.to_i + ] + result[pattern.name] = value + end + ] + end + dbus_method :ProvisionsSelected, "in Provisions:as, out Result:ab" do |provisions| [provisions.map { |p| backend.provision_selected?(p) }] end diff --git a/service/lib/agama/software/manager.rb b/service/lib/agama/software/manager.rb index 84e17e2e9e..3eb44e4c67 100644 --- a/service/lib/agama/software/manager.rb +++ b/service/lib/agama/software/manager.rb @@ -26,6 +26,7 @@ require "agama/with_progress" require "agama/validation_error" require "y2packager/product" +require "y2packager/resolvable" require "yast2/arch_filter" require "agama/software/callbacks" require "agama/software/proposal" @@ -177,6 +178,17 @@ def provision_selected?(tag) Yast::Pkg.IsSelected(tag) || Yast::Pkg.IsProvided(tag) end + # Enlist available patterns + # + # @param filtered [Boolean] If list of patterns should be filtered. Filtering criteria can change. + # @return [Array] + def patterns(filtered) + patterns = Y2Packager::Resolvable.find(kind: :pattern) + patterns = patterns.select(&:user_visible) if filtered + + return patterns + end + # Determines whether a package is installed # # @param name [String] Package name From f2d85cdc1ff8ae4cfd4824e04394c156af79a323 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Thu, 21 Sep 2023 13:41:06 +0200 Subject: [PATCH 3/6] add new bus method to bus introspection document --- doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml | 4 ++++ doc/dbus/bus/org.opensuse.Agama1.Locale.bus.xml | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml b/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml index 74fb5df917..82970322e0 100644 --- a/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml +++ b/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml @@ -31,6 +31,10 @@ + + + + diff --git a/doc/dbus/bus/org.opensuse.Agama1.Locale.bus.xml b/doc/dbus/bus/org.opensuse.Agama1.Locale.bus.xml index 21c5c665d7..38416bd6bc 100644 --- a/doc/dbus/bus/org.opensuse.Agama1.Locale.bus.xml +++ b/doc/dbus/bus/org.opensuse.Agama1.Locale.bus.xml @@ -44,6 +44,20 @@ + + + + @@ -56,6 +70,7 @@ + From dfe6e11cf782316005e5bd3c85db881d51bccd42 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Thu, 21 Sep 2023 18:23:46 +0200 Subject: [PATCH 4/6] Use new documentation style for software and document new methods --- doc/dbus/org.opensuse.Agama.Software1.bus.xml | 96 +++++++++++++++++++ doc/dbus/org.opensuse.Agama1.Locale.doc.xml | 6 ++ doc/dbus_api.md | 30 +----- 3 files changed, 105 insertions(+), 27 deletions(-) create mode 100644 doc/dbus/org.opensuse.Agama.Software1.bus.xml diff --git a/doc/dbus/org.opensuse.Agama.Software1.bus.xml b/doc/dbus/org.opensuse.Agama.Software1.bus.xml new file mode 100644 index 0000000000..cd7eb6c4f6 --- /dev/null +++ b/doc/dbus/org.opensuse.Agama.Software1.bus.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/dbus/org.opensuse.Agama1.Locale.doc.xml b/doc/dbus/org.opensuse.Agama1.Locale.doc.xml index a01daffc3c..00dadf4cb2 100644 --- a/doc/dbus/org.opensuse.Agama1.Locale.doc.xml +++ b/doc/dbus/org.opensuse.Agama1.Locale.doc.xml @@ -19,6 +19,12 @@ + + + + diff --git a/doc/dbus_api.md b/doc/dbus_api.md index fe036e3a62..807c83f24c 100644 --- a/doc/dbus_api.md +++ b/doc/dbus_api.md @@ -55,34 +55,10 @@ See the new-style [reference][lang-ref] ([source][lang-src]). Iface: o.o.Agama.Software1 -#### methods: - -- SelectProduct(string ProductId) -> void - Select product for installation. - TODO: do we need version or arch or any other parameter? should we add generic dict(sv) to it? - Example: - - InstallProduct("SLES") -> () # only name from available BaseProducts is supported - -#### Properties (all read only): - -- AvailableBaseProducts -> array(struct(string ProductId, string ProductLabel, dict(string, variant) details)) - List of all available base product to install on target system. - Note: List is sorted according to defined display order - Example: - - AvailableBaseProducts -> [["SLES", "SUSE Linux Enterprise Server", {}]] # it is product name, human readable name and dict for future extensions to provide more data - -- SelectedBaseProduct -> string ProductId - Base product selected for installation. It is always defined. - Example: - - SelectedBaseProduct -> "SLES" # only name from available BaseProducts is supported - -#### Signals: - -- PropertiesChanged ( only standard one from org.freedesktop.DBus.Properties interface ) +See the new-style [reference][lang-ref] ([source][lang-src]). +[lang-ref]: https://opensuse.github.io/agama/dbus/ref-org.opensuse.Agama.Software1.html +[lang-src]: dbus/org.opensuse.Agama.Software1.doc.xml ## `org.opensuse.Agama.Storage1` Service From 8077ebca7634a70dc53b1b02222b76e121c320c1 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Thu, 21 Sep 2023 21:11:23 +0200 Subject: [PATCH 5/6] make rubocop happy --- service/lib/agama/software/manager.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/service/lib/agama/software/manager.rb b/service/lib/agama/software/manager.rb index 3eb44e4c67..4152e3bfaf 100644 --- a/service/lib/agama/software/manager.rb +++ b/service/lib/agama/software/manager.rb @@ -180,13 +180,14 @@ def provision_selected?(tag) # Enlist available patterns # - # @param filtered [Boolean] If list of patterns should be filtered. Filtering criteria can change. + # @param filtered [Boolean] If list of patterns should be filtered. + # Filtering criteria can change. # @return [Array] def patterns(filtered) patterns = Y2Packager::Resolvable.find(kind: :pattern) patterns = patterns.select(&:user_visible) if filtered - return patterns + patterns end # Determines whether a package is installed From fe0fecc5ce0adb3d9bad1708b559c779081c6c3e Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Thu, 21 Sep 2023 21:13:13 +0200 Subject: [PATCH 6/6] fix missing property and document it --- doc/dbus/org.opensuse.Agama1.Locale.doc.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/dbus/org.opensuse.Agama1.Locale.doc.xml b/doc/dbus/org.opensuse.Agama1.Locale.doc.xml index 00dadf4cb2..8844528be1 100644 --- a/doc/dbus/org.opensuse.Agama1.Locale.doc.xml +++ b/doc/dbus/org.opensuse.Agama1.Locale.doc.xml @@ -37,6 +37,10 @@ + +