I'm sorry for replying late.

On 2020/09/26 19:12, Daniel Shahaf wrote:
> Yasuhito FUTATSUKI wrote on Fri, 25 Sep 2020 19:09 +0900:

First of all, I'd like to correct my misunderstanding. 

>> On 2020/09/25 17:05, Yasuhito FUTATSUKI wrote:
>>> On 2020/09/25 16:06, Daniel Shahaf wrote:  
>>
>>>> First, if the client applies any transformation at all to property
>>>> values, that'd be a bug.  Property values are opaque octet sequences,
>>>> just like file contents, so they must be emitted verbatim.  It so
>>>> happens that values of svn:* properties are UTF-8 with LF line endings,
>>>> so that's what Python should see, regardless of the local encoding and
>>>> EOL style.  
>>>
>>> I judged that EOL conversion of property values on 'svn pg' isn't bug
>>> because this comment is found in test for it. If it is a bug,
>>> prop_tests.py also does not test correctly.  
>>
>> This behavior was introduced in r1003238, as a "fix" of the issue #3721.
> 
> Good find — but if that's the case, why was the comment describing this
> behaviour was added to the test much earlier, in r845369 (= r5295)?

I'm very sorry, this was my misunderstanding. r1003238 was fix of
EOL style on a property name printing, not for a value.

> Yasuhito FUTATSUKI wrote on Fri, 25 Sep 2020 17:05 +0900:
>> On 2020/09/25 16:06, Daniel Shahaf wrote:
>>> futat...@apache.org wrote on Thu, 24 Sep 2020 17:06 -0000:  
>>>> Author: futatuki
>>>> Date: Thu Sep 24 17:06:39 2020
>>>> New Revision: 1881985
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=1881985&view=rev
>>>> Log:
>>>> Follow up to r1880192: Fix an EOL issue in test on Windows.
>>>>
>>>> * subversion/tests/cmdline/merge-tests.py
>>>>   (merge_deleted_folder_with_mergeinfo_2): Use os.linesep instead of '\n'
>>>>   in expected values of svn:mergeinfo.
>>>>
>>>> Modified:
>>>>     subversion/trunk/subversion/tests/cmdline/merge_tests.py
>>>>
>>>> Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py
>>>> URL: 
>>>> http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tests.py?rev=1881985&r1=1881984&r2=1881985&view=diff
>>>> ==============================================================================
>>>> --- subversion/trunk/subversion/tests/cmdline/merge_tests.py (original)
>>>> +++ subversion/trunk/subversion/tests/cmdline/merge_tests.py Thu Sep 24 
>>>> 17:06:39 2020
>>>> @@ -18639,11 +18639,19 @@ def merge_deleted_folder_with_mergeinfo_
>>>>                                         )
>>>>  
>>>>    # verify that mergeinfo is set/changed on A/D, A/D/G, A/D/G2.
>>>> +
>>>> +  # NOTE: When writing out multi-line prop values in svn:* props, the
>>>> +  # client converts to local encoding and local eol style.
>>>> +  # Therefore, the expected output must contain the right kind of eoln
>>>> +  # strings. That's why we use os.linesep in the tests below, not just
>>>> +  # plain '\n'. The _last_ \n is also from the client, but it's not
>>>> +  # part of the prop value and it doesn't get converted in the pipe.  
>>
>> Before answer the questions, the comment above was brougt from 
                                                      ^^^^^^ brought
>> prop_value_conversion() in prop_tests.py.
>>  
> 
> *nod*
> 
>>> I'm confused.
>>>
>>> First, if the client applies any transformation at all to property
>>> values, that'd be a bug.  Property values are opaque octet sequences,
>>> just like file contents, so they must be emitted verbatim.  It so
>>> happens that values of svn:* properties are UTF-8 with LF line endings,
>>> so that's what Python should see, regardless of the local encoding and
>>> EOL style.  
>>
>> I judged that EOL conversion of property values on 'svn pg' isn't bug
>> because this comment is found in test for it.
> 
> If you mean prop_value_conversion(), that test isn't about EOL style
> and encodings at all.  It's about normalization of the values of some
> svn:* properties, such as this:
> .
>     % svn ps -q svn:executable yes iota 
>     % svn pg svn:executable iota 
>     *
>     % 
> 
> The test for binary property values is prop_tests.py:binary_props().  It
> doesn't cover newlines.
> 
>> If it is a bug, prop_tests.py also does not test correctly.
> 
> I've looked further and I think it's working as designed, but the
> design is rather unintuitive.
> 
> In the data model, property values are binary data.  That's why, in
> the API, property hashes' value type is svn_string_t.  However, the
> cmdline client doesn't print all properties as binary data; it prints
> svn:* properties as text, transcoded and EOL-converted, even as it
> prints other properties in binary:
> .
>     
> https://svn.apache.org/viewvc/subversion/tags/1.0.0/subversion/clients/cmdline/props.c?view=markup#l50
> 
> The code still exists in trunk@HEAD, in propget-cmd.c.
> 
> These semantics mean prop_tests.py and merge_tests.py are both correct
> to expect os.linesep in the output.
>

I confirmed it the code on trunk. Thank you. In propget-cmd.c,
svn_cl__propget() calls print_single_prop() through print_properties()
for non-xml output, and print_single_prop() calls
svn_cmdline__print_prop_hash() for single value for "svn pg -v" or
calls svn_subst_detranslate_string() for "svn:*" props before output
it to the out stream.

I'll fix the comment in merge_tests.py. As the issue on the comment
in prop_tests.py is not related to the change on r1881985 directly,
I won't fix it simultanously.

I think the rest of your mail needs farther discussion, so I'll
try to reply later, with changing Subject: header.

Cheers,
-- 
Yasuhito FUTATSUKI <futat...@yf.bsclub.org>

Reply via email to