diff --git a/VERSION b/VERSION index 73606886..c371397f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.17.24 +2.17.25 diff --git a/package/yast2-update.changes b/package/yast2-update.changes index c0701784..a7b60836 100644 --- a/package/yast2-update.changes +++ b/package/yast2-update.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Fri Jan 16 13:47:52 UTC 2015 - lslezak@suse.cz + +- display number of locked ("protected" and "taboo") packages in + the package proposal summary (fate#318257) +- 2.17.25 + ------------------------------------------------------------------- Mon Feb 25 12:36:15 CET 2013 - jsuchome@suse.cz diff --git a/src/clients/packages_proposal.ycp b/src/clients/packages_proposal.ycp index 549ce551..f5d88544 100644 --- a/src/clients/packages_proposal.ycp +++ b/src/clients/packages_proposal.ycp @@ -44,6 +44,43 @@ return ret; } + // count locked packages + define map locked_packages() + { + list protected = []; + list taboo = []; + + list packages = Pkg::ResolvableProperties("", `package, ""); + + // Pkg::ResolvableProperties returns all package instances (all versions), + // we have to ensure that a package is either in "taboo" or "protected" + // list (but never in both) and each package is counted only once + foreach(map package, packages, { + if (package["locked"]:false) + { + string name = package["name"]:""; + + if (package["status"]:nil == `available && !contains(taboo, name) && + !contains(protected, name)) + { + taboo = add(taboo, name); + } + + if (package["status"]:nil == `installed && !contains(protected, name)) + { + protected = add(protected, name); + + // remove from taboo if a different version is there + taboo = filter(string taboo_name, taboo, { return taboo_name != name; }); + } + } + }); + + y2milestone("Protected packages: %1", protected); + y2milestone("Taboo packages: %1", taboo); + + return $[ `protected : size(protected), `taboo : size(taboo) ]; + } if ( func == "MakeProposal" ) { @@ -107,6 +144,20 @@ // proposal for packages during update, %1 is count of packages tmp = add (tmp, sformat (_("New Packages to Install: %1"), Update::packages_to_install)); + + map locked = locked_packages(); + if (locked[`protected]:0 > 0) + { + // summary text, %1 is a number of protected packages, + // (kept in the current version, disabled for upgrade) + tmp = add(tmp, HTML::Colorize(sformat(_("Protected Packages: %1"), locked[`protected]:0), "red")); + } + if (locked[`taboo]:0 > 0) + { + // summary text, %1 is a number of taboo packages (forbidden to install) + tmp = add(tmp, HTML::Colorize(sformat(_("Taboo Packages: %1"), locked[`taboo]:0), "red")); + } + // proposal for packages during update, %1 is count of packages tmp = add (tmp, sformat (_("Packages to Remove: %1"), Update::packages_to_remove));