On 11/03/2010 06:00 PM, Michael Goldish wrote:
> On 11/03/2010 11:43 AM, Jinxin Zheng wrote:
>
>> On 11/03/2010 05:21 PM, Michael Goldish wrote:
>>
>>> On 11/03/2010 10:55 AM, Jinxin Zheng wrote:
>>>
>>>
>>>> On 11/03/2010 04:31 PM, Michael Goldish wrote:
>>>>
>>>>
>>>>> On 11/03/2010 09:23 AM, Jinxin Zheng wrote:
>>>>>
>>>>>
>>>>>
>>>>>> On 11/03/2010 03:07 PM, Jason Wang wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>> Jinxin Zheng writes:
>>>>>>> > Hi,
>>>>>>> >
>>>>>>> > Is there any way to delete an existing option in the kvm
>>>>>>> test
>>>>>>> config file?
>>>>>>> >
>>>>>>> > I mean, something like this:
>>>>>>> >
>>>>>>> > --
>>>>>>> > key1 = value1
>>>>>>> > key2 = value2
>>>>>>> > key3 = value3
>>>>>>> >
>>>>>>> > variants:
>>>>>>> > - one:
>>>>>>> > key1 = Hello World
>>>>>>> > unset key2<--- delete the option only in this dict.
>>>>>>> > - two:
>>>>>>> >
>>>>>>>
>>>>>>> I'm not sure but does
>>>>>>>
>>>>>>> key2 =
>>>>>>>
>>>>>>> works?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> Thank you. This sets the option empty but does not delete the option.
>>>>>>
>>>>>>
>>>>>>
>>>>> If that isn't good enough, you should probably modify the test you're
>>>>> using to use the parameter only if it evaluates as true, e.g.
>>>>>
>>>>> if params.get("key2"):
>>>>> do_something(params.get("key2"))
>>>>>
>>>>> This way empty values will be considered as though they are unset.
>>>>>
>>>>>
>>>>>
>>>> Could be, though this would require more modification in the tests.
>>>>
>>>>
>>> Yes, but I think that's OK because most tests already do that (in
>>> kvm-autotest anyway).
>>>
>>> The required changes are very small. Instead of using:
>>> if 'key2' in params:
>>> Use:
>>> if params.get('key2'):
>>>
>>> And instead of:
>>> value = params.get("key2", "default value")
>>> Use:
>>> value = params.get("key2") or "default value"
>>>
>>> This way if the value of key2 is "", "default value" will be used.
>>>
>>>
>>>
>>>>> If this is impossible (perhaps "" is a valid value for the parameter),
>>>>> then we can easily add an 'unset' command to the config parser.
>>>>> Mind if I ask which test you're running?
>>>>>
>>>>>
>>>>>
>>>> Actually I'm running xen-autotest, which uses an earlier version of the
>>>> kvm config file parser.
>>>>
>>>> Yufang implemented a new operator '?-' which works perfect for us.
>>>> However this patch does not apply to the upstream code.
>>>>
>>>>
>>> We can use that upstream too. What's the syntax of the '?-' operator?
>>> What do you think about using 'del key2' like in Python?
>>>
>>>
>> The operator is used as:
>>
>> key2 ?-
>>
>> In Yufang's implementation, this operator treats key2 as a regex and
>> deletes all the options that matches, which is the behavior the '?'
>> implies.
>>
>> I think a 'del' command would also be ideal, but I guess it would match
>> the key exactly.
>>
> We can use the same command both for exact matches and regex matches.
> In the case of += and ?+=, for example, we have to have two different
> commands, because one creates the key or overwrites it, and the other
> only modifies existing keys. In the 'del' case we can only delete
> existing keys. So 'del key2' would delete an exact match, and 'del
> key2.*' would delete everything starting with 'key2'.
>
>
Nice. Thank you for so detailed analysis.
We'll try to change to 'del' since it really looks prettier.
>> This is the main part of Yufang's '?-' code:
>>
>> --
>> ...
>> elif op_found == "?-":
>> for dict in filtered_list:
>> for key in dict.keys():
>> if exp.match(key):
>> dict.pop(key)
>>
>>
>
--
Regards.
Jinxin
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest