msi: INSTALLSTATE_SOURCE also overrides a parent feature state change to INSTALLSTATE_ABSENT.
This commit is contained in:
parent
a4c6ca2b65
commit
6518f3d7f2
|
@ -869,20 +869,21 @@ void ACTION_UpdateComponentStates(MSIPACKAGE *package, LPCWSTR szFeature)
|
|||
/*if any other feature wants is local we need to set it local*/
|
||||
LIST_FOR_EACH_ENTRY( f, &package->features, MSIFEATURE, entry )
|
||||
{
|
||||
if ( component->ActionRequest != INSTALLSTATE_LOCAL )
|
||||
if ( f->ActionRequest != INSTALLSTATE_LOCAL &&
|
||||
f->ActionRequest != INSTALLSTATE_SOURCE )
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
LIST_FOR_EACH_ENTRY( clist, &f->Components, ComponentList, entry )
|
||||
{
|
||||
if ( clist->component == component )
|
||||
if ( clist->component == component &&
|
||||
(f->ActionRequest == INSTALLSTATE_LOCAL ||
|
||||
f->ActionRequest == INSTALLSTATE_SOURCE) )
|
||||
{
|
||||
if (f->ActionRequest == INSTALLSTATE_LOCAL)
|
||||
{
|
||||
TRACE("Saved by %s\n", debugstr_w(f->Feature));
|
||||
component->ActionRequest = INSTALLSTATE_LOCAL;
|
||||
component->Action = INSTALLSTATE_LOCAL;
|
||||
}
|
||||
break;
|
||||
TRACE("Saved by %s\n", debugstr_w(f->Feature));
|
||||
component->ActionRequest = f->ActionRequest;
|
||||
component->Action = f->ActionRequest;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2638,8 +2638,8 @@ static void test_featureparents(void)
|
|||
todo_wine
|
||||
{
|
||||
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
|
||||
ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
|
||||
}
|
||||
ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
|
||||
|
||||
state = 0xdeadbee;
|
||||
action = 0xdeadbee;
|
||||
|
@ -2658,8 +2658,8 @@ static void test_featureparents(void)
|
|||
todo_wine
|
||||
{
|
||||
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
|
||||
ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
|
||||
}
|
||||
ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
|
||||
|
||||
state = 0xdeadbee;
|
||||
action = 0xdeadbee;
|
||||
|
@ -2678,8 +2678,8 @@ static void test_featureparents(void)
|
|||
todo_wine
|
||||
{
|
||||
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
|
||||
ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
|
||||
}
|
||||
ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
|
||||
|
||||
state = 0xdeadbee;
|
||||
action = 0xdeadbee;
|
||||
|
@ -2688,8 +2688,8 @@ static void test_featureparents(void)
|
|||
todo_wine
|
||||
{
|
||||
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
|
||||
ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
|
||||
}
|
||||
ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
|
||||
|
||||
state = 0xdeadbee;
|
||||
action = 0xdeadbee;
|
||||
|
|
Loading…
Reference in New Issue