Skip to content

Commit

Permalink
Merge pull request #84 from yast/review_140924_package_selection
Browse files Browse the repository at this point in the history
[Review] Request from 'schubi2' @ 'yast/yast-autoinstallation/review_140924_package_selection'
  • Loading branch information
schubi2 committed Sep 25, 2014
2 parents 06030cf + bbc4c35 commit dda4a26
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 64 deletions.
7 changes: 7 additions & 0 deletions package/autoyast2.changes
@@ -1,3 +1,10 @@
-------------------------------------------------------------------
Wed Sep 24 18:27:58 CEST 2014 - schubi@suse.de

- Exporting package selection correctly.
(bnc#897404)
- 3.1.63

-------------------------------------------------------------------
Wed Sep 24 11:24:39 CEST 2014 - schubi@suse.de

Expand Down
2 changes: 1 addition & 1 deletion package/autoyast2.spec
Expand Up @@ -17,7 +17,7 @@


Name: autoyast2
Version: 3.1.62
Version: 3.1.63
Release: 0

BuildRoot: %{_tmppath}/%{name}-%{version}-build
Expand Down
95 changes: 32 additions & 63 deletions src/modules/AutoinstSoftware.rb
Expand Up @@ -950,22 +950,48 @@ def locked_packages
packages.map! {|p| p["name"] }
end

def install_packages
# user selected packages which have not been already installed
packages = Pkg.FilterPackages(
solver_selected = false,
app_selected = true,
user_selected = true,
name_only = true)

# user selected packages which have already been installed
installed_by_user = Pkg.GetPackages(:installed, true).select{ |pkg_name|
Pkg.PkgPropertiesAll(pkg_name).any? { |package| package["on_system_by_user"] }
}

# Filter out kernel and pattern packages
kernel_packages = Pkg.PkgQueryProvides("kernel").collect { |package|
package[0]
}.compact.uniq
pattern_packages = Pkg.PkgQueryProvides("pattern()").collect { |package|
package[0]
}.compact.uniq

(packages + installed_by_user).uniq.select{ |pkg_name|
!kernel_packages.include?(pkg_name) &&
!pattern_packages.include?(pkg_name)
}
end

# Return list of software packages of calling client
# in the installed environment
# @return [Hash] map of installed software package
# "patterns" -> list<string> addon selections
# "packages" -> list<string> user selected packages
# "remove-packages" -> list<string> packages to remove
def ReadHelper
ret = Pkg.TargetInit("/", false)
# Pkg::TargetInitialize ("/");
Pkg.TargetInit("/", false)
Pkg.TargetLoad
Pkg.SourceStartManager(true)
Pkg.PkgSolve(false)

@inst = Pkg.GetPackages(:installed, true)
all_patterns = Pkg.ResolvableProperties("", :pattern, "")
@all_xpatterns = Pkg.ResolvableDependencies("", :pattern, "")
to_install_packages = install_packages
patterns = []

patternsFullData = Builtins.filter(all_patterns) do |p|
Expand All @@ -988,10 +1014,7 @@ def ReadHelper
Builtins.y2debug("SourceStartCache: %1", Pkg.SourceStartCache(false))

Pkg.SourceStartManager(true)

userpackages = Pkg.FilterPackages(false, false, true, true)
Pkg.TargetFinish
# Remove kernel packages

patternPackages = []
new_p = []
Expand All @@ -1006,10 +1029,6 @@ def ReadHelper
if Ops.get_string(d, "res_kind", "") == "package" &&
(Ops.get_string(d, "dep_kind", "") == "requires" ||
Ops.get_string(d, "dep_kind", "") == "recommends")
patternPackages = Builtins.add(
patternPackages,
Ops.get_string(d, "name", "")
)
req = true
end
end
Expand All @@ -1020,61 +1039,17 @@ def ReadHelper
end
patterns = deep_copy(new_p)

patternPackagesTemp = deep_copy(patternPackages)
run = false
emergency_break = 0
begin
run = false
emergency_break = Ops.add(emergency_break, 1)
# remove all packages that are pulled in by the resolver anyway
tmp = []
patternPackagesTemp = Builtins.toset(patternPackagesTemp)
Builtins.foreach(patternPackagesTemp) do |ppackage|
Builtins.foreach(Pkg.ResolvableDependencies(ppackage, :package, "")) do |d|
Builtins.foreach(Ops.get_list(d, "dependencies", [])) do |dd|
if Ops.get_string(dd, "res_kind", "") == "package" &&
(Ops.get_string(dd, "dep_kind", "") == "requires" ||
Ops.get_string(dd, "dep_kind", "") == "recommends") &&
!Builtins.contains(
patternPackages,
Ops.get_string(dd, "name", "")
)
patternPackages = Builtins.add(
patternPackages,
Ops.get_string(dd, "name", "")
)
tmp = Builtins.add(tmp, Ops.get_string(dd, "name", ""))
run = true
end
end
end
end
patternPackagesTemp = deep_copy(tmp)
Builtins.y2milestone("temp package list = %1", tmp)
end while run == true && Ops.less_than(emergency_break, 20)

software = {}
if Ops.greater_than(Builtins.size(patterns), 0)
Builtins.foreach(@inst) do |p|
if !Builtins.contains(patternPackages, p)
userpackages = Builtins.add(userpackages, p)
end
end
end

Ops.set(
software,
"packages",
Builtins.sort(Builtins.filter(userpackages) do |pkg|
!Builtins.regexpmatch(pkg, "kernel-.*") || pkg == "kernel-uml"
end)
)
Ops.set(software, "patterns", Builtins.sort(patterns))
# Currently we do not have any information about user deleted packages in
# the installed system.
# In order to prevent a reinstallation we can take the locked packages at least.
# (bnc#888296)
software["remove-packages"] = locked_packages

software["packages"] = to_install_packages

deep_copy(software)
end

Expand All @@ -1096,12 +1071,6 @@ def read_initial_stage
end
end

install_packages = Pkg.FilterPackages(
solver_selected = false,
app_selected = false,
user_selected = true,
name_only = true)

software = {}
software["packages"] = install_packages
software["patterns"] = install_patterns.compact
Expand Down

0 comments on commit dda4a26

Please sign in to comment.