You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Martin Hauner <ma...@gmx.net> on 2009/10/24 09:57:55 UTC

mingw32 test failure: svn_dirent_is_canonical

Hi I'm trying to make subversion run on mingw32.

Running any python test fails because of a drive letter case mismatch. I found 
the problem and my question is how and where do I fix it.

./authz_tests.py 1 (it is simply the first python test) breaks with

CMD: svn.exe import -m "Log message for revision 1." 
"svn-test-work\local_tmp\greekfiles" 
"file:///c%3A/Development/mingw/svn-trunk/subversion/tests/cmdline/svn-test-work/local_tmp/repos" 
--config-dir 
"c:\Development\mingw\svn-trunk\subversion\tests\cmdline\svn-test-work\local_tmp\config" 
--password rayjandom --no-auth-cache --username jrandom
<TIME = 0.266000>
Assertion failed: svn_dirent_is_canonical(base, pool), file 
subversion/libsvn_subr/dirent_uri.c,
line 879


The problem is the lower drive 'c' in "file:///c%3A/Development/ming/svn-trunk...".

svn_dirent_is_canonical does not except lower case drive letters.

When it asserts the callstack is:

0 svn_dirent_join                      dirent_uri.c 879	
1 check_repos_path                     repos.c      1266	
2 svn_repos_find_root_path             repos.c      1371	
3 svn_ra_local__split_URL              split_url.c  136	
4 svn_ra_local__open                   ra_plugin.c  455	
5 svn_ra_open3                         ra_loader.c  487	
6 svn_client__open_ra_session_internal ra.c         331	
7 get_ra_editor                        commit.c     616	
8 svn_client_import3                   commit.c     736	
9 svn_cl__import                       import-cmd.c 119	
10 main                                main.c       2195	


In svn_ra_local__split_URL there is Windows specific code that excepts lower 
case drive letters. This doesn't fit with svn_dirent_is_canonical not excepting 
lower case rive letters.

A fix would be to canonicalized the file:///c%3A url. Where would I add it? 
Directly in svn_ra_local__split_URL or some levels up?

-- 
Martin

Subcommander 2.0.0 Beta 5 - http://subcommander.tigris.org
a Win32/Unix/MacOSX subversion GUI client & diff/merge tool.

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2410954

Re: [PATCH] Re: mingw32 test failure: svn_dirent_is_canonical

Posted by Gavin Baumanis <ga...@thespidernet.com>.
I have logged this is in the tracker @3523
http://subversion.tigris.org/issues/show_bug.cgi?id=3523


Gavin.


On 10/11/2009, at 08:49 , Daniel Shahaf wrote:

> Gavin 'Beau' Baumanis wrote on Mon, 9 Nov 2009 at 21:34 +1100:
>> Hi Martin / Daniel,
>> Just a quick message to check if there is anything more going to  
>> happen here
>> or not - Shall I send it to the issue tracker?
>>
>
> AFAICT, yes please.  Both me and Martin agree the patch fixes  
> *something*
> (we just don't agree on *what*), and the assertion I mentioned  
> should be
> investigated (or at least reproduced; I was in a bit of a hurry then).
>
>> And because I have no (technical) idea about Subversion, I have  
>> cc'd bert in
>> as result of the thread below.
>> The patches mention different files, but are both about windows  
>> drive letters
>> and their case - so thought I would check if this (thread) is now  
>> superseded
>> by Bert's that still has some life in it.
>> http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2414408
>>
>
> Daniel
> (reading just his inbox, not his svn-dev mailbox)
>
>>
>> Gavin.
>>
>>
>>
>> On 03/11/2009, at 10:19 , Gavin Baumanis wrote:
>>
>>> Ping. This submission has received no new comments.
>>>
>>> Gavin.
>>>
>>>
>>> On 28/10/2009, at 17:06 , Daniel Shahaf wrote:
>>>
>>>> Martin Hauner wrote on Sun, 25 Oct 2009 at 11:09 +0100:
>>>>> Hi,
>>>>>
>>>>> On 24.10.09 19:45, Daniel Shahaf wrote:
>>>>>> /me investigates...
>>>>>>
>>>>>> I think the assertion is caused not by the lowercase drive  
>>>>>> letter,
>>>>>> but by
>>>>>> the colon following it being URI-encoded.  In other words,
>>>>>>
>>>>>>  svn info file:///c:/foo           # works
>>>>>>  svn info file:///c%3A/foo         # asserts
>>>>>>
>>>>>> Can you confirm this?
>>>>>
>>>>> No.
>>>>> There is an svn_path_uri_decode call inside  
>>>>> svn_ra_local__split_URL
>>>>> that
>>>>> replaces the '%3A' with ':'. I single stepped through the code and
>>>>> it fails
>>>>> because of the case mismatch.
>>>>>
>>>>
>>>> Weird.  Anyway, if we both agree the patch fixes something, I'll
>>>> commit
>>>> it.  But let me run 'make check' first.
>>>>
>>>> ( two days later... )
>>>>
>>>> OK, it passed. [1]  Good.  I'll commit it.
>>>>
>>>> [[[
>>>> ../libsvn_ra_local% svn ci -F split_url.logmsg
>>>> Sending        libsvn_ra_local\split_url.c
>>>> Assertion failed: svn_path_is_canonical(base, pool), file ..\..\..
>>>> \subversion\libsvn_subr\path.c, line 100
>>>> ]]]
>>>>
>>>> At the time of the commit, my wc was from
>>>> <https://svn.collab.net/repos/svn
>>>>> .
>>>> Most of the time it's from <file:///Data/Unzip/svn/mirror/svn>.  (I
>>>> keep
>>>> an svnsync mirror and 'switch --relocate' to it whenever I'm not
>>>> committing something.)
>>>>
>>>> Now I have a problem.  It asserted out with the patched build.   
>>>> So I
>>>> can
>>>> try to revert the patch and try again to commit.  But if the commit
>>>> then
>>>> succeeds, it means the assertion was unearthed by the patch, which
>>>> means
>>>> I shouldn't commit it without further investigation.
>>>>
>>>> Catch 22.
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Daniel
>>>> (no time to dive into a debugger right now, sorry.)
>>>>
>>>>
>>>>
>>>>
>>>> [1] Not because it took two days!  Because I started it yesterday  
>>>> and
>>>> only looked at the results today...
>>>>
>>>>> Unfortunately with the attached patch the python tests still don't
>>>>> run
>>>>> properly. They don't hit the assertion anymore but now fail with
>>>>> the same
>>>>> error checking their output.
>>>>>
>>>>> Not exactly sure what this means..
>>>>>
>>>>> Couldn't find node 'C:' in expected output tree
>>>>> * Node name:   C:
>>>>> Path:       __SVN_ROOT_NODE\C:
>>>>> Contents:   N/A (node is a directory)
>>>>> Properties: {}
>>>>> Attributes: {}
>>>>> Children:   1
>>>>> ACTUAL OUTPUT TREE:
>>>>> <python stack trace follows>
>>>>>
>>>>>
>>>>> But there is a little improvement... :)
>>>>>
>>>>>
>>>>
>>>> ------------------------------------------------------
>>>> http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2411951
>>>
>>> ------------------------------------------------------
>>> http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2413975
>>
>
> ------------------------------------------------------
> http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2415919

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2416316

Re: [PATCH] Re: mingw32 test failure: svn_dirent_is_canonical

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
Gavin 'Beau' Baumanis wrote on Mon, 9 Nov 2009 at 21:34 +1100:
> Hi Martin / Daniel,
> Just a quick message to check if there is anything more going to happen here
> or not - Shall I send it to the issue tracker?
> 

AFAICT, yes please.  Both me and Martin agree the patch fixes *something* 
(we just don't agree on *what*), and the assertion I mentioned should be 
investigated (or at least reproduced; I was in a bit of a hurry then).

> And because I have no (technical) idea about Subversion, I have cc'd bert in
> as result of the thread below.
> The patches mention different files, but are both about windows drive letters
> and their case - so thought I would check if this (thread) is now superseded
> by Bert's that still has some life in it.
> http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2414408
> 

Daniel
(reading just his inbox, not his svn-dev mailbox)

> 
> Gavin.
> 
> 
> 
> On 03/11/2009, at 10:19 , Gavin Baumanis wrote:
> 
> > Ping. This submission has received no new comments.
> > 
> > Gavin.
> > 
> > 
> > On 28/10/2009, at 17:06 , Daniel Shahaf wrote:
> > 
> > > Martin Hauner wrote on Sun, 25 Oct 2009 at 11:09 +0100:
> > > > Hi,
> > > > 
> > > > On 24.10.09 19:45, Daniel Shahaf wrote:
> > > > > /me investigates...
> > > > > 
> > > > > I think the assertion is caused not by the lowercase drive letter,
> > > > > but by
> > > > > the colon following it being URI-encoded.  In other words,
> > > > > 
> > > > >   svn info file:///c:/foo           # works
> > > > >   svn info file:///c%3A/foo         # asserts
> > > > > 
> > > > > Can you confirm this?
> > > > 
> > > > No.
> > > > There is an svn_path_uri_decode call inside svn_ra_local__split_URL
> > > > that
> > > > replaces the '%3A' with ':'. I single stepped through the code and
> > > > it fails
> > > > because of the case mismatch.
> > > > 
> > > 
> > > Weird.  Anyway, if we both agree the patch fixes something, I'll
> > > commit
> > > it.  But let me run 'make check' first.
> > > 
> > > ( two days later... )
> > > 
> > > OK, it passed. [1]  Good.  I'll commit it.
> > > 
> > > [[[
> > > ../libsvn_ra_local% svn ci -F split_url.logmsg
> > > Sending        libsvn_ra_local\split_url.c
> > > Assertion failed: svn_path_is_canonical(base, pool), file ..\..\..
> > > \subversion\libsvn_subr\path.c, line 100
> > > ]]]
> > > 
> > > At the time of the commit, my wc was from
> > > <https://svn.collab.net/repos/svn
> > > > .
> > > Most of the time it's from <file:///Data/Unzip/svn/mirror/svn>.  (I
> > > keep
> > > an svnsync mirror and 'switch --relocate' to it whenever I'm not
> > > committing something.)
> > > 
> > > Now I have a problem.  It asserted out with the patched build.  So I
> > > can
> > > try to revert the patch and try again to commit.  But if the commit
> > > then
> > > succeeds, it means the assertion was unearthed by the patch, which
> > > means
> > > I shouldn't commit it without further investigation.
> > > 
> > > Catch 22.
> > > 
> > > 
> > > Thanks,
> > > 
> > > Daniel
> > > (no time to dive into a debugger right now, sorry.)
> > > 
> > > 
> > > 
> > > 
> > > [1] Not because it took two days!  Because I started it yesterday and
> > > only looked at the results today...
> > > 
> > > > Unfortunately with the attached patch the python tests still don't
> > > > run
> > > > properly. They don't hit the assertion anymore but now fail with
> > > > the same
> > > > error checking their output.
> > > > 
> > > > Not exactly sure what this means..
> > > > 
> > > > Couldn't find node 'C:' in expected output tree
> > > > * Node name:   C:
> > > >  Path:       __SVN_ROOT_NODE\C:
> > > >  Contents:   N/A (node is a directory)
> > > >  Properties: {}
> > > >  Attributes: {}
> > > >  Children:   1
> > > > ACTUAL OUTPUT TREE:
> > > > <python stack trace follows>
> > > > 
> > > > 
> > > > But there is a little improvement... :)
> > > > 
> > > > 
> > > 
> > > ------------------------------------------------------
> > > http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2411951
> > 
> > ------------------------------------------------------
> > http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2413975
>

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2415919

Re: [PATCH] Re: mingw32 test failure: svn_dirent_is_canonical

Posted by Gavin Baumanis <ga...@thespidernet.com>.
Hi Martin / Daniel,
Just a quick message to check if there is anything more going to  
happen here or not - Shall I send it to the issue tracker?

And because I have no (technical) idea about Subversion, I have cc'd  
bert in as result of the thread below.
The patches mention different files, but are both about windows drive  
letters and their case - so thought I would check if this (thread) is  
now superseded by Bert's that still has some life in it.
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2414408


Gavin.



On 03/11/2009, at 10:19 , Gavin Baumanis wrote:

> Ping. This submission has received no new comments.
>
> Gavin.
>
>
> On 28/10/2009, at 17:06 , Daniel Shahaf wrote:
>
>> Martin Hauner wrote on Sun, 25 Oct 2009 at 11:09 +0100:
>>> Hi,
>>>
>>> On 24.10.09 19:45, Daniel Shahaf wrote:
>>>> /me investigates...
>>>>
>>>> I think the assertion is caused not by the lowercase drive letter,
>>>> but by
>>>> the colon following it being URI-encoded.  In other words,
>>>>
>>>>    svn info file:///c:/foo           # works
>>>>    svn info file:///c%3A/foo         # asserts
>>>>
>>>> Can you confirm this?
>>>
>>> No.
>>> There is an svn_path_uri_decode call inside svn_ra_local__split_URL
>>> that
>>> replaces the '%3A' with ':'. I single stepped through the code and
>>> it fails
>>> because of the case mismatch.
>>>
>>
>> Weird.  Anyway, if we both agree the patch fixes something, I'll
>> commit
>> it.  But let me run 'make check' first.
>>
>> ( two days later... )
>>
>> OK, it passed. [1]  Good.  I'll commit it.
>>
>> [[[
>> ../libsvn_ra_local% svn ci -F split_url.logmsg
>> Sending        libsvn_ra_local\split_url.c
>> Assertion failed: svn_path_is_canonical(base, pool), file ..\..\..
>> \subversion\libsvn_subr\path.c, line 100
>> ]]]
>>
>> At the time of the commit, my wc was from <https://svn.collab.net/repos/svn
>>> .
>> Most of the time it's from <file:///Data/Unzip/svn/mirror/svn>.  (I
>> keep
>> an svnsync mirror and 'switch --relocate' to it whenever I'm not
>> committing something.)
>>
>> Now I have a problem.  It asserted out with the patched build.  So I
>> can
>> try to revert the patch and try again to commit.  But if the commit
>> then
>> succeeds, it means the assertion was unearthed by the patch, which
>> means
>> I shouldn't commit it without further investigation.
>>
>> Catch 22.
>>
>>
>> Thanks,
>>
>> Daniel
>> (no time to dive into a debugger right now, sorry.)
>>
>>
>>
>>
>> [1] Not because it took two days!  Because I started it yesterday and
>> only looked at the results today...
>>
>>> Unfortunately with the attached patch the python tests still don't
>>> run
>>> properly. They don't hit the assertion anymore but now fail with
>>> the same
>>> error checking their output.
>>>
>>> Not exactly sure what this means..
>>>
>>> Couldn't find node 'C:' in expected output tree
>>> * Node name:   C:
>>>   Path:       __SVN_ROOT_NODE\C:
>>>   Contents:   N/A (node is a directory)
>>>   Properties: {}
>>>   Attributes: {}
>>>   Children:   1
>>> ACTUAL OUTPUT TREE:
>>> <python stack trace follows>
>>>
>>>
>>> But there is a little improvement... :)
>>>
>>>
>>
>> ------------------------------------------------------
>> http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2411951
>
> ------------------------------------------------------
> http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2413975

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2415734

Re: [PATCH] Re: mingw32 test failure: svn_dirent_is_canonical

Posted by Gavin Baumanis <ga...@thespidernet.com>.
Ping. This submission has received no new comments.

Gavin.


On 28/10/2009, at 17:06 , Daniel Shahaf wrote:

> Martin Hauner wrote on Sun, 25 Oct 2009 at 11:09 +0100:
>> Hi,
>>
>> On 24.10.09 19:45, Daniel Shahaf wrote:
>>> /me investigates...
>>>
>>> I think the assertion is caused not by the lowercase drive letter,  
>>> but by
>>> the colon following it being URI-encoded.  In other words,
>>>
>>>     svn info file:///c:/foo           # works
>>>     svn info file:///c%3A/foo         # asserts
>>>
>>> Can you confirm this?
>>
>> No.
>> There is an svn_path_uri_decode call inside svn_ra_local__split_URL  
>> that
>> replaces the '%3A' with ':'. I single stepped through the code and  
>> it fails
>> because of the case mismatch.
>>
>
> Weird.  Anyway, if we both agree the patch fixes something, I'll  
> commit
> it.  But let me run 'make check' first.
>
> ( two days later... )
>
> OK, it passed. [1]  Good.  I'll commit it.
>
> [[[
> ../libsvn_ra_local% svn ci -F split_url.logmsg
> Sending        libsvn_ra_local\split_url.c
> Assertion failed: svn_path_is_canonical(base, pool), file ..\..\.. 
> \subversion\libsvn_subr\path.c, line 100
> ]]]
>
> At the time of the commit, my wc was from <https://svn.collab.net/repos/svn 
> >.
> Most of the time it's from <file:///Data/Unzip/svn/mirror/svn>.  (I  
> keep
> an svnsync mirror and 'switch --relocate' to it whenever I'm not
> committing something.)
>
> Now I have a problem.  It asserted out with the patched build.  So I  
> can
> try to revert the patch and try again to commit.  But if the commit  
> then
> succeeds, it means the assertion was unearthed by the patch, which  
> means
> I shouldn't commit it without further investigation.
>
> Catch 22.
>
>
> Thanks,
>
> Daniel
> (no time to dive into a debugger right now, sorry.)
>
>
>
>
> [1] Not because it took two days!  Because I started it yesterday and
> only looked at the results today...
>
>> Unfortunately with the attached patch the python tests still don't  
>> run
>> properly. They don't hit the assertion anymore but now fail with  
>> the same
>> error checking their output.
>>
>> Not exactly sure what this means..
>>
>> Couldn't find node 'C:' in expected output tree
>> * Node name:   C:
>>    Path:       __SVN_ROOT_NODE\C:
>>    Contents:   N/A (node is a directory)
>>    Properties: {}
>>    Attributes: {}
>>    Children:   1
>> ACTUAL OUTPUT TREE:
>> <python stack trace follows>
>>
>>
>> But there is a little improvement... :)
>>
>>
>
> ------------------------------------------------------
> http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2411951

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2413975

Re: [PATCH] Re: mingw32 test failure: svn_dirent_is_canonical

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
Martin Hauner wrote on Sun, 25 Oct 2009 at 11:09 +0100:
> Hi,
> 
> On 24.10.09 19:45, Daniel Shahaf wrote:
> > /me investigates...
> > 
> > I think the assertion is caused not by the lowercase drive letter, but by
> > the colon following it being URI-encoded.  In other words,
> > 
> >      svn info file:///c:/foo           # works
> >      svn info file:///c%3A/foo         # asserts
> > 
> > Can you confirm this?
> 
> No.
> There is an svn_path_uri_decode call inside svn_ra_local__split_URL that
> replaces the '%3A' with ':'. I single stepped through the code and it fails
> because of the case mismatch.
> 

Weird.  Anyway, if we both agree the patch fixes something, I'll commit
it.  But let me run 'make check' first.

( two days later... )

OK, it passed. [1]  Good.  I'll commit it.

[[[
../libsvn_ra_local% svn ci -F split_url.logmsg
Sending        libsvn_ra_local\split_url.c
Assertion failed: svn_path_is_canonical(base, pool), file ..\..\..\subversion\libsvn_subr\path.c, line 100
]]]

At the time of the commit, my wc was from <https://svn.collab.net/repos/svn>.  
Most of the time it's from <file:///Data/Unzip/svn/mirror/svn>.  (I keep
an svnsync mirror and 'switch --relocate' to it whenever I'm not
committing something.)

Now I have a problem.  It asserted out with the patched build.  So I can
try to revert the patch and try again to commit.  But if the commit then
succeeds, it means the assertion was unearthed by the patch, which means
I shouldn't commit it without further investigation.

Catch 22.


Thanks,

Daniel
(no time to dive into a debugger right now, sorry.)




[1] Not because it took two days!  Because I started it yesterday and
only looked at the results today...

> Unfortunately with the attached patch the python tests still don't run
> properly. They don't hit the assertion anymore but now fail with the same
> error checking their output.
> 
> Not exactly sure what this means..
> 
> Couldn't find node 'C:' in expected output tree
>  * Node name:   C:
>     Path:       __SVN_ROOT_NODE\C:
>     Contents:   N/A (node is a directory)
>     Properties: {}
>     Attributes: {}
>     Children:   1
> ACTUAL OUTPUT TREE:
> <python stack trace follows>
> 
> 
> But there is a little improvement... :)
> 
>

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2411951

[PATCH] Re: mingw32 test failure: svn_dirent_is_canonical

Posted by Martin Hauner <ma...@gmx.net>.
Hi,

On 24.10.09 19:45, Daniel Shahaf wrote:
> Martin Hauner wrote on Sat, 24 Oct 2009 at 18:55 +0200:
>> On 24.10.09 14:07, Daniel Shahaf wrote:
>>> Martin Hauner wrote on Sat, 24 Oct 2009 at 11:57 +0200:
>>>> Hi I'm trying to make subversion run on mingw32.
>>>>
>>>> Running any python test fails because of a drive letter case mismatch. I
>>>> found
>>>
>>> I'd be interested to know what mingw does differently that breaks
>>> our expectations (causing this assertion).
>>
>> I did some investigation where the lower case path comes from and it turns out
>> it has nothing to do with mingw:
>>
>> $ python
>> ActivePython 2.5.1.1 (ActiveState Software Inc.) based on
>> Python 2.5.1 (r251:54863, May  1 2007, 17:47:05) [MSC v.1310 32 bit (Intel)]
>> on win32
>> Type "help", "copyright", "credits" or "license" for more information.
>>>>> import os
>>>>> os.path.abspath(".")
>> 'c:\\Development\\mingw\\svn-trunk'
>>>>>
>>
>
> This explains why the lowercase 'c' appears (because svntest/main.py does
> the equivalent of "file://`pwd`" to construct the URL for the 'import'
> command).  But why is the assertion unique to your environment?  Are you
> the only windows builder using ActivePython?

Yes, that is strange.

Maybe the code recently changed on trunk? Before trying the mingw stuff on 
trunk, I already tried it on the 1.6.x branch. And there I didn't have this 
problem... Most of the python test did run without error.


> /me investigates...
>
> I think the assertion is caused not by the lowercase drive letter, but by
> the colon following it being URI-encoded.  In other words,
>
>      svn info file:///c:/foo           # works
>      svn info file:///c%3A/foo         # asserts
>
> Can you confirm this?

No.
There is an svn_path_uri_decode call inside svn_ra_local__split_URL that 
replaces the '%3A' with ':'. I single stepped through the code and it fails 
because of the case mismatch.

Unfortunately with the attached patch the python tests still don't run properly. 
They don't hit the assertion anymore but now fail with the same error checking 
their output.

Not exactly sure what this means..

Couldn't find node 'C:' in expected output tree
  * Node name:   C:
     Path:       __SVN_ROOT_NODE\C:
     Contents:   N/A (node is a directory)
     Properties: {}
     Attributes: {}
     Children:   1
ACTUAL OUTPUT TREE:
<python stack trace follows>


But there is a little improvement... :)

-- 
Martin

Subcommander 2.0.0 Beta 5 - http://subcommander.tigris.org
a Win32/Unix/MacOSX subversion GUI client & diff/merge tool.

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2411148

Re: mingw32 test failure: svn_dirent_is_canonical

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
Martin Hauner wrote on Sat, 24 Oct 2009 at 18:55 +0200:
> On 24.10.09 14:07, Daniel Shahaf wrote:
> > Martin Hauner wrote on Sat, 24 Oct 2009 at 11:57 +0200:
> > > Hi I'm trying to make subversion run on mingw32.
> > > 
> > > Running any python test fails because of a drive letter case mismatch. I
> > > found
> > 
> > I'd be interested to know what mingw does differently that breaks
> > our expectations (causing this assertion).
> 
> I did some investigation where the lower case path comes from and it turns out
> it has nothing to do with mingw:
> 
> $ python
> ActivePython 2.5.1.1 (ActiveState Software Inc.) based on
> Python 2.5.1 (r251:54863, May  1 2007, 17:47:05) [MSC v.1310 32 bit (Intel)]
> on win32
> Type "help", "copyright", "credits" or "license" for more information.
> >>> import os
> >>> os.path.abspath(".")
> 'c:\\Development\\mingw\\svn-trunk'
> >>>
> 

This explains why the lowercase 'c' appears (because svntest/main.py does 
the equivalent of "file://`pwd`" to construct the URL for the 'import' 
command).  But why is the assertion unique to your environment?  Are you 
the only windows builder using ActivePython?

/me investigates...

I think the assertion is caused not by the lowercase drive letter, but by 
the colon following it being URI-encoded.  In other words,

    svn info file:///c:/foo           # works
    svn info file:///c%3A/foo         # asserts

Can you confirm this?

> > > In svn_ra_local__split_URL there is Windows specific code that
> > > excepts lower case drive letters. This doesn't fit with
> > > svn_dirent_is_canonical not excepting lower case rive letters.
> > > 
> > > A fix would be to canonicalized the file:///c%3A url. Where would
> > > I add it?  Directly in svn_ra_local__split_URL or some levels up?
> > 
> > I think you'll find the URL is already canonical (since as early as
> > parsing argv), but URL canonicalization doesn't force the drive letter
> > to uppercase.  In other words, svn_ra_local__split_URL() got a canonical
> > URL but passed down a non-canonical dirent (local path).
> > 
> > So, IMO, change svn_ra_local__split_URL() to canonicalize (or assert
> > canonicity of) the dirent it creates before passing it down.
> 
> Thanks for explanation, I'll try it the way you suggest. :)

Okay :)

(and this should be fixed independently of the %3A issue above... we
shouldn't be passing non-canonical paths to libsvn_repos, period.)

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2411071

Re: mingw32 test failure: svn_dirent_is_canonical

Posted by Martin Hauner <ma...@gmx.net>.
Hi Daniel,

On 24.10.09 14:07, Daniel Shahaf wrote:
> Martin Hauner wrote on Sat, 24 Oct 2009 at 11:57 +0200:
>> Hi I'm trying to make subversion run on mingw32.
>>
>> Running any python test fails because of a drive letter case mismatch. I found
>
> I'd be interested to know what mingw does differently that breaks
> our expectations (causing this assertion).

I did some investigation where the lower case path comes from and it turns out 
it has nothing to do with mingw:

$ python
ActivePython 2.5.1.1 (ActiveState Software Inc.) based on
Python 2.5.1 (r251:54863, May  1 2007, 17:47:05) [MSC v.1310 32 bit (Intel)] on 
win32
Type "help", "copyright", "credits" or "license" for more information.
 >>> import os
 >>> os.path.abspath(".")
'c:\\Development\\mingw\\svn-trunk'
 >>>

>
>> Assertion failed: svn_dirent_is_canonical(base, pool), file
>> subversion/libsvn_subr/dirent_uri.c,
>> line 879
>>
>>
>> The problem is the lower drive 'c' in "file:///c%3A/Development/ming/svn-trunk...".
>>
>> svn_dirent_is_canonical does not except lower case drive letters.
>>
>
> s//accept/

Yes, of course, thank you :)

>> In svn_ra_local__split_URL there is Windows specific code that excepts lower
>> case drive letters. This doesn't fit with svn_dirent_is_canonical not excepting
>> lower case rive letters.
>>
>> A fix would be to canonicalized the file:///c%3A url. Where would I add it?
>> Directly in svn_ra_local__split_URL or some levels up?
>
> I think you'll find the URL is already canonical (since as early as
> parsing argv), but URL canonicalization doesn't force the drive letter
> to uppercase.  In other words, svn_ra_local__split_URL() got a canonical
> URL but passed down a non-canonical dirent (local path).
>
> So, IMO, change svn_ra_local__split_URL() to canonicalize (or assert
> canonicity of) the dirent it creates before passing it down.

Thanks for explanation, I'll try it the way you suggest. :)

-- 
Martin

Subcommander 2.0.0 Beta 5 - http://subcommander.tigris.org
a Win32/Unix/MacOSX subversion GUI client & diff/merge tool.

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2411063

Re: mingw32 test failure: svn_dirent_is_canonical

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
Martin Hauner wrote on Sat, 24 Oct 2009 at 11:57 +0200:
> Hi I'm trying to make subversion run on mingw32.
> 
> Running any python test fails because of a drive letter case mismatch. I found 

I'd be interested to know what mingw does differently that breaks
our expectations (causing this assertion).

> Assertion failed: svn_dirent_is_canonical(base, pool), file 
> subversion/libsvn_subr/dirent_uri.c,
> line 879
> 
> 
> The problem is the lower drive 'c' in "file:///c%3A/Development/ming/svn-trunk...".
> 
> svn_dirent_is_canonical does not except lower case drive letters.
> 

s//accept/

> When it asserts the callstack is:
> 
> 0 svn_dirent_join                      dirent_uri.c 879	
> 1 check_repos_path                     repos.c      1266	
> 2 svn_repos_find_root_path             repos.c      1371	
> 3 svn_ra_local__split_URL              split_url.c  136	
> 4 svn_ra_local__open                   ra_plugin.c  455	
> 5 svn_ra_open3                         ra_loader.c  487	
> 6 svn_client__open_ra_session_internal ra.c         331	
> 7 get_ra_editor                        commit.c     616	
> 8 svn_client_import3                   commit.c     736	
> 9 svn_cl__import                       import-cmd.c 119	
> 10 main                                main.c       2195	
> 
> 
> In svn_ra_local__split_URL there is Windows specific code that excepts lower 
> case drive letters. This doesn't fit with svn_dirent_is_canonical not excepting 
> lower case rive letters.
> 
> A fix would be to canonicalized the file:///c%3A url. Where would I add it? 
> Directly in svn_ra_local__split_URL or some levels up?

I think you'll find the URL is already canonical (since as early as
parsing argv), but URL canonicalization doesn't force the drive letter
to uppercase.  In other words, svn_ra_local__split_URL() got a canonical
URL but passed down a non-canonical dirent (local path).

So, IMO, change svn_ra_local__split_URL() to canonicalize (or assert
canonicity of) the dirent it creates before passing it down.

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2411023