filenames in custom Ivy artifact pattern

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

filenames in custom Ivy artifact pattern

jgeorgeson
In our Ant+Ivy builds, we publish artifacts with this Ivy artifact pattern

[organisation]/[module]/[branch]/[revision]/[type]/([home]/)([homeType]/)([path]/)[artifact](.[ext])

The home, homeType, and path values are from custom attributes on each <artifact/> in the ivy.xml, and the artifact value is from the name attribute on each <artifact/> in the ivy.xml. In Artifactory I'm trying to setup a custom layout so that I can try and get some interoperability with Maven (at worst case by copying  artifacts between local repositories). I need to support filenames that might have no extension or the filename might have dots in it.

This pattern seems to correctly support all cases of having an extension (foo.txt -> name=foo and ext=txt, foo_10.1.dll -> name=foo_10.1 and ext=dll, foo.so.10.1 -> name=foo and ext=.so.10.1) but not files with no extension.

[org]/[releaseName<[^/]+>]/[module]/[branch<[^/]+>]/[baseRev]/[type]/([home<[^/]*>]/[homeType<[^/]*>]/)([path<[^/]*>]/)([name<.+>].[ext]

As soon as I change it to this

[org]/[releaseName<[^/]+>]/[module]/[branch<[^/]+>]/[baseRev]/[type]/([home<[^/]*>]/[homeType<[^/]*>]/)([path<[^/]*>]/)([name<.+>](.[ext])

Artifactory always parses the whole filename into the name attribute and no ext. If I use

[org]/[releaseName<[^/]+>]/[module]/[branch<[^/]+>]/[baseRev]/[type]/([home<[^/]*>]/[homeType<[^/]*>]/)([path<[^/]*>]/)([name<.+>].[ext])([name<.+>])

Then Artifactory only matches the ext and never the name. Anybody have the magic sauce?