Author: lslezak
Date: Wed Jun 11 10:25:34 2008
New Revision: 48216
URL: http://svn.opensuse.org/viewcvs/yast?rev=48216&view=rev
Log:
- added options for sw_single client, display proper workflow for
add-ons (bnc#377154)
Modified:
trunk/packager/package/yast2-packager.changes
trunk/packager/src/clients/inst_packages.ycp
trunk/packager/src/clients/sw_single.ycp
trunk/packager/src/modules/AddOnProduct.ycp
Modified: trunk/packager/package/yast2-packager.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/packager/package/yast2-packager.changes?rev=48216&r1=48215&r2=48216&view=diff
==============================================================================
--- trunk/packager/package/yast2-packager.changes (original)
+++ trunk/packager/package/yast2-packager.changes Wed Jun 11 10:25:34 2008
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Wed Jun 11 10:24:54 CEST 2008 - lslezak@suse.cz
+
+- added options for sw_single client, display proper workflow for
+ add-ons (bnc#377154)
+
+-------------------------------------------------------------------
Wed Jun 4 17:26:06 CEST 2008 - lslezak@suse.cz
- use PackageLock::Connect() - display [Abort] button (bnc#293356)
Modified: trunk/packager/src/clients/inst_packages.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/packager/src/clients/inst_packages.ycp?rev=48216&r1=48215&r2=48216&view=diff
==============================================================================
--- trunk/packager/src/clients/inst_packages.ycp (original)
+++ trunk/packager/src/clients/inst_packages.ycp Wed Jun 11 10:25:34 2008
@@ -24,6 +24,8 @@
**/
symbol detailedSelection( symbol mode, boolean enable_repo_mgr )
{
+ y2milestone("Running detailed selection, mode: %1, display repo management: %2", mode, enable_repo_mgr);
+
// Open an empty dialog for immediate feedback
UI::OpenDialog(`opt(`defaultsize),
`ReplacePoint(`id( `rep),
@@ -61,6 +63,8 @@
**/
symbol patternSelection()
{
+ y2milestone("Running pattern selection dialog");
+
if ( ! UI::HasSpecialWidget(`PatternSelector ) ||
UI::WizardCommand(`Ping() ) != true )
{
@@ -147,29 +151,58 @@
y2milestone("Stage: %1, Mode: %2, Args: %3", Stage::stage(), Mode::mode(), WFM::Args());
// installation or update from a running system (there is a "Pattern Selection" button) (#229951)
- if ( Stage::initial() || (Stage::normal() && Mode::update()))
+ if (size(WFM::Args()) == 0 && (Stage::initial() || (Stage::normal() && Mode::update())))
{
result = patternSelection();
}
else
{
- if ( size( WFM::Args() ) > 0 && is( WFM::Args(0), symbol ) )
+ if ( size( WFM::Args() ) > 0 && is( WFM::Args(0), map ) )
{
- symbol mode = (symbol) WFM::Args(0);
- y2milestone( "inst_packages called with: %1" , mode );
+ y2milestone("inst_packages called with options: %1", WFM::Args());
+
+ symbol mode = nil;
+ boolean repo_mgr = nil;
+
+ // the options may be passed in a map or in a list
+ if (is(WFM::Args(0), map))
+ {
+ map opts = (map) WFM::Args(0);
+ mode = opts["dialog_type"]:`searchMode;
+ repo_mgr = opts["repo_mgr"]:false;
+ }
+ else if (is(WFM::Args(0), symbol))
+ {
+ mode = (symbol)WFM::Args(0);
- boolean repo_mgr = false;
+ if (is(WFM::Args(1), symbol))
+ {
+ repo_mgr = WFM::Args(1) == `repoMgr;
+ }
+ }
- if (size(WFM::Args()) > 1 && is( WFM::Args(1), symbol))
+ if (mode == nil)
{
- repo_mgr = WFM::Args(1) == `repoMgr;
+ mode = `searchMode;
}
- result = detailedSelection( mode , repo_mgr );
+ if (repo_mgr == nil)
+ {
+ repo_mgr = Mode::normal();
+ }
+
+ if (mode == `patternSelector || mode == `pattern)
+ {
+ result = patternSelection();
+ }
+ else
+ {
+ result = detailedSelection(mode , repo_mgr);
+ }
}
else
{
- result = detailedSelection( `searchMode, false );
+ result = detailedSelection(`searchMode, false);
}
}
Modified: trunk/packager/src/clients/sw_single.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/packager/src/clients/sw_single.ycp?rev=48216&r1=48215&r2=48216&view=diff
==============================================================================
--- trunk/packager/src/clients/sw_single.ycp (original)
+++ trunk/packager/src/clients/sw_single.ycp Wed Jun 11 10:25:34 2008
@@ -8,6 +8,13 @@
* "Install/Remove software"
*
* $Id$
+ *
+ * Note: sw_single accepts a map parameter: $[ "dialog_type" : symbol,
+ * "repo_mgmt" : boolean ]
+ *
+ * "dialog_type" can be `patternSelector, `searchMode, `summaryMode
+ * "repo_mgmt" enables "Repositories" -> "Repository Manager..." menu option
+ * "ask_again" ask again after installing/removing a package
*/
{
@@ -306,6 +313,76 @@
return !max_is_installed;
}
+ // ask again after installing/removing a package?
+ boolean ask_again = true;
+
+ void SetAskOption()
+ {
+ foreach(any a, WFM::Args(),
+ {
+ if (is(a, map))
+ {
+ map m = (map)a;
+ if (haskey(m, "ask_again"))
+ {
+ ask_again = m["ask_again"]:true;
+ }
+ }
+ }
+ );
+
+ if (ask_again == nil)
+ {
+ ask_again = true;
+ }
+
+ y2milestone("Ask after installing/removing: %1", ask_again);
+ }
+
+ map GetPackagerOptions()
+ {
+ // defaults
+ symbol mode = nil;
+ boolean repo_management = nil;
+
+ y2milestone("Args: %1", WFM::Args());
+
+ foreach(any a, WFM::Args(),
+ {
+ if (is(a, map))
+ {
+ map m = (map)a;
+
+ if (haskey(m, "dialog_type"))
+ {
+ mode = m["dialog_type"]:`searchMode;
+ }
+
+ if (haskey(m, "repo_mgmt"))
+ {
+ repo_management = m["repo_mgmt"]:false;
+ }
+ }
+ }
+ );
+
+ // use default parameters for missing or invalid values
+ if (mode == nil)
+ {
+ mode = `searchMode;
+ }
+ if (repo_management == nil)
+ {
+ repo_management = Mode::normal();
+ }
+
+ map ret = $[ "dialog_type" : mode, "repo_mgmt" : repo_management ];
+
+ y2milestone("inst_packages config: %1", ret);
+
+ return ret;
+ }
+
// =============================================================
@@ -379,15 +456,21 @@
// names of taboo packages
list<string> taboo_packages = Pkg::GetPackages(`taboo, true);
- result = (symbol)WFM::CallFunction( "inst_packages", [`searchMode, `repoMgr]); // No: ask user via package selection widget
+ map opts = GetPackagerOptions();
+ y2milestone("Using packager widget options: %1", opts);
+
+ // set ask_again variable
+ SetAskOption();
+
+ result = (symbol)WFM::CallFunction( "inst_packages", [opts]); // No: ask user via package selection widget
y2milestone ("inst_packages returns %1", result);
if (result == `accept)
{
result = `next;
// ask only when there is something to install/remove
// or when taboo package has been changed
- ask = Pkg::IsAnyResolvable(`any, `to_install) || Pkg::IsAnyResolvable(`any, `to_remove)
- || Pkg::GetPackages(`taboo, true) != taboo_packages;
+ ask = ask_again && (Pkg::IsAnyResolvable(`any, `to_install) || Pkg::IsAnyResolvable(`any, `to_remove)
+ || Pkg::GetPackages(`taboo, true) != taboo_packages);
y2milestone("Ask to restart the package selector: %1", ask);
}
// start the repository manager
Modified: trunk/packager/src/modules/AddOnProduct.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/packager/src/modules/AddOnProduct.ycp?rev=48216&r1=48215&r2=48216&view=diff
==============================================================================
--- trunk/packager/src/modules/AddOnProduct.ycp (original)
+++ trunk/packager/src/modules/AddOnProduct.ycp Wed Jun 11 10:25:34 2008
@@ -37,6 +37,7 @@
import "String";
import "WorkflowManager";
import "URL";
+import "Mode";
// variables for installation with product
/**
@@ -279,9 +280,41 @@
return true;
}
+boolean AnyPatternInRepo()
+{
+ list<map> patterns = Pkg::ResolvableProperties("", `pattern, "");
+
+ y2milestone("Total number of patterns: %1", size(patterns));
+
+ patterns = filter(map pat, patterns,
+ {
+ return (pat["source"]:nil == src_id);
+ }
+ );
+
+ y2milestone("Found %1 add-on patterns", size(patterns));
+ y2debug("Found add-on patterns: %1", patterns);
+
+ return size(patterns) > 0;
+}
+
symbol DoInstall_NoControlFile () {
y2milestone("File /installation.xml not found, running sw_single for this repository");
- WFM::CallFunction ("sw_single", []);
+
+ // display pattern the dialog when there is a pattern provided by the addon
+ // otherwise use search mode
+ symbol mode = AnyPatternInRepo() ? `patternSelector : `searchMode;
+ // enable repository management if not in installation mode
+ boolean enable_repo_management = Mode::normal();
+
+ map args = $[ "dialog_type" : mode, "repo_mgmt" : enable_repo_management, "ask_again" : false ];
+ y2milestone("Arguments for sw_single: %1", args);
+
+ any ret = WFM::CallFunction ("sw_single", [args]);
+ y2milestone("sw_single returned: %1", ret);
+
+ if (ret == `abort || ret == `cancel || ret == `close)
+ return `abort;
return `register;
}
@@ -530,7 +563,9 @@
ret = DoInstall_WithControlFile (control);
}
- if (ret != nil) {
+ y2milestone("Result of the add-on installation: %1", ret);
+
+ if (ret != nil && ret != `abort) {
// registers Add-On product if requested
RegisterAddOnProduct (src_id);
}
@@ -552,6 +587,10 @@
map