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

Reply via email to