On 29 Dec 2017, at 10:35, Cyril Ferlicot D. <cyril.ferlicot@gmail.com> wrote:
Hi,
In order to improve the usage of Pharo and the git integration there is some discussions around Metacello in order to be able to:
- Load a private git project from Metacello API - Load a project hosted on a private server from Metacello API - Load a project hosted on a private server with non default ssh port from Metacello API - Depend on a private git project in a baseline - Depend on a project hosted on a private server in a baseline - Depend on a project hosted on a private server with non default ssh port in a baseline
To achieve this, Metacello needs to be able to manage urls like:
- 'git@gitlab.ferlicot.fr:Projet/Bazard.git' - 'ssh://git@gitlab.ferlicot.fr:3456/Projet/Bazard.git'
and many others.
Dale wants to use Zinc to manage urls's in Pharo.
It works great for this url:
'ssh://git@gitlab.ferlicot.fr:3456/Projet/Bazard.git' asUrl
It gives an instance of ZnUrl of the ssh scheme, gitlab.ferlicot.fr as host, 3456 as port, git as username and #('Project' 'Bazard.git') as segments.
Now the problem is that it does not work well for this url:
'git@gitlab.ferlicot.fr:Projet/Bazard.git' asUrl
ZnUrl fromString: 'git@gitlab.ferlicot.fr/Projet/Bazard.git' defaultScheme: #http. ZnUrl fromString: 'git@gitlab.ferlicot.fr/Projet/Bazard.git' defaultScheme: #ssh. URI/URL are put in classes or types based on their scheme. If there is no explicit scheme in the URI/URL itself, you have to supply a default one. That being said, the general syntax supported by ZnUrl is approximately scheme://username:password@host:port/segments?query#fragment The colon right after the host is reserved for a port, a path has to start with a / (unless you are using relative URL's, but then you need a parent context). This is why I changed your example, to make it work. There literally exist hundreds of schemes, some with very weird syntax. That is indeed the prerogative of a scheme, to define its own special syntax. However, the straightforward approach of the ZnUrl parser cannot recognise those. The question then becomes: how to provide an extension mechanism for exotic schemes ? Although the question has come up a couple of times, it has never been very urgent. I know that some people have programmed around this limitation, maybe they could tell us what they did.
It gives an instance of ZnUrl with #('git@gitlab.ferlicot.fr:Projet' 'Bazard.git') as segments.
What do you think guys about this issue? Could the flexibility of ZnUrls be improved in order to be able to use it? Should Metacello use another way?
To see the full discussions: - Github issue: https://github.com/Metacello/metacello/issues/474 - Metacello group discussion: https://groups.google.com/forum/#!topic/metacello/QbpngL6Jhg8
Have a nice day :)
-- Cyril Ferlicot https://ferlicot.fr
http://www.synectique.eu 2 rue Jacques Prévert 01, 59650 Villeneuve d'ascq France