On 11 Aug 2011, at 14:52, Igor Stasenko wrote:

> Yes, of course we could just fix url and that's it.
> But my question was more general (because i knew why and where it fails ;)

OK ;-)

> But ok.. If you think we should always explicitly use scheme,
> in that case, i think it should produce errors earlier, i.e.
> if it cannot detect any scheme, it should raise a malformed url error.
> Because as you can see in
> 
> ScriptLoader new installingInstaller
> 
> it throws error at random place, when MC trying to connect using URL.
> I'd prefer that URL throw an error, so we could see 1-2 stack frames
> below the caller who passing wrong url,
> but not like today, it buried under a lot of unrelated stuff from MC.

Well, I did some commits (with more tests) adding support so that 

        ZnUrl fromString: 'www.squeaksource.com/installer' defaultScheme: #http

becomes equivalent to

        ZnUrl fromString: 'http://www.squeaksource.com/installer'

although I think the second is better (and it is what #asZnUrl currently wants).

I did not (yet) change the current behavior of #asZnUrl to either always use 
#http as default scheme or throw an exception for a missing scheme, because I 
still think that it can be useful to have neither of these two behaviors, see 
for example ZnUrlTests>>#testParsePathOnly and ZnUrlTests>>#testRelative. But 
maybe we'll come across more arguments in the future.

Sven

> On 11 August 2011 14:24, Sven Van Caekenberghe <[email protected]> wrote:
>> Hi Igor,
>> 
>> On 05 Aug 2011, at 11:07, Igor Stasenko wrote:
>> 
>>> The problem is in:
>>> 
>>> ScriptLoader new installingInstaller.
>>> 
>>> without default scheme this thing is broken, since it using url
>>> without scheme. :(
>>> 
>>> Of course i could use gofer for loading it.. but i found this is most
>>> easy way to load installer.
>> 
>> I studied this a bit, but the base problem is the specification of the MC 
>> location. If you replace:
>> 
>> mc := Smalltalk globals
>>        at: #MCHttpRepository
>>        fPresent: [ :repoClass | repoClass location: 
>> 'www.squeaksource.com/Installer' user: 'squeak' password: 'squeak' ].
>> 
>> with
>> 
>> mc := Smalltalk globals
>>        at: #MCHttpRepository
>>        ifPresent: [ :repoClass | repoClass location: 
>> 'http://www.squeaksource.com/Installer' user: 'squeak' password: 'squeak' ].
>> 
>> in ScriptLoader>>#installingInstaller,
>> 
>> it should work. Note that all MCHttpRepository are created like this, the 
>> template specifies it as well:
>> 
>> MCHttpRepository
>>        location: 'http://www.squeaksource.com/'
>>        user: ''
>>        password: ''
>> 
>> I could make this into a patch/slice if you want.
>> 
>> Concering ZnUrl parsing, I am not sure that something has to change. ZnUrl 
>> is based on WAUrl that behaves the same. I just checked java.net.URL and 
>> they even throw an exception when you don't specify a scheme ;-) (because of 
>> the ambiguity).
>> 
>> Consider also relative URLs: for example, in the context of 
>> http://www.example.com:8080/examples/index.html, the relative URL about.html 
>> should be resolvable/composable to 
>> http://www.example.com:8080/examples/about.html. The current ZnUrl 
>> implementation sees about.html (but also foo.com) as a path, which is OK in 
>> this absolute/relative idea. The older Url class turns about.html into a 
>> host specification instead, which would be wrong from this prespective.
>> 
>> On the other hand, most browsers (and curl for example), will consider a 
>> string like 'foo' to mean a host as in http://foo
>> 
>> With the scheme prefix 'http://' you actually indicate what you want, maybe 
>> some extra API can support this default behavior programmatically, I am 
>> still thinking about this.
>> 
>> Regards,
>> 
>> Sven
>> 
>> 
>> 
>> 
> 
> 
> 


Reply via email to