Re: [PATCH] Change test suite to read file properties in XML format [was: Re: cvs2svn test suite breakage caused by svn changes]

Michael Haggerty <[email protected]>
Newsgroups gmane.comp.version-control.subversion.cvs2svn.devel
Message-ID <[email protected]>
James Abbatiello wrote:
> On Sun, Jul 26, 2009 at 12:02 PM, Michael Haggerty<[email protected]> wrote:
>> The only difference I would expect compared to the old code is that the
>> old code handled end-of-lines unusually, which I presume was a
>> side-effect of having to parse the text output of "svn proplist".  I
>> think that what the new code does is the "right thing", but *if* there
>> are problems they are likely to appear under Windows, which I don't have
>> available for testing.
> 
> On Windows the old code produces:
>>>> svntest.tree.get_props(['svntest'])
> {'svntest': {'svn:ignore': '*.pyc\n*.o\n*~\n.*~\n\n'}}
> 
> And the new version produces:
>>>> svntest.tree.get_props(['svntest'])
> {u'svntest': {u'svn:ignore': u'*.pyc\r\n*.o\r\n*~\r\n.*~\r\n\r\n'}}
> 
> So it looks like some line-ending manipulation is still needed unless
> the consumers are prepared to handle both forms.

James, thanks for testing this.  It would be trivial to add the
EOL-fixing code to my patch, but first I want to understand it because I
fear there is a deeper problem.

After digging through more Subversion code I found that the handling of
property values is strange (and not very consistent).  Even in the case
of XML output, where I had expected the data to come out 1:1, SVN munges
properties that start with "svn:" while they are being output.  I hadn't
expected that.

But even though SVN outputs '\r\n' on Windows, I still don't understand
how the '\r\n' characters get through in the test suite.  The calling
sequence in the test suite goes like this (before my patch):

    tree.get_props(...):
      main.run_svn(1, ...):
        main.run_command(..., binary_mode=0):
          main.run_command_stdin(...):
            main.spawn_process(...):
              main.open_pipe()
              main.wait_on_pipe():
                if windows and not binary_mode:
                  stdout = stdout.replace('\r\n', '\n')
                  stderr = stderr.replace('\r\n', '\n')
                stdout_lines = stdout.splitlines(True)
                stderr_lines = stderr.splitlines(True)
            remove 'DBG:' lines from stdout

main.run_svn() explicitly sets binary_mode=0 when it calls
main.run_command(), and the "windows" variable is set by the following
code in main.py:

# Windows specifics
if sys.platform == 'win32':
  windows = True
  # ...
else:
  windows = False
  # ...

So, assuming that your python interpreter has sys.platform=='win32', the
end-of-lines should have all been normalized to '\n' in main.wait_on_pipe().

Perhaps there is a cygwin issue or something.  James, what does

    python -c 'import sys; print sys.platform'

print on your computer?

From the above call tree, it also looks like main.run_command_stdin()
should have already discarded any lines that start with 'DBG:', so the
corresponding code in tree.get_props() should be redundant.

I will submit a new patch when this gets sorted out.

Michael

------------------------------------------------------
http://cvs2svn.tigris.org/ds/viewMessage.do?dsForumId=1667&dsMessageId=2375965

To unsubscribe from this discussion, e-mail: [[email protected]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.