On 12/09/2013, at 12:25 AM, Harald Schmitt <li...@hschmitt.de> wrote:

> Am 20.08.2013 01:47, schrieb Adam Murdoch:
>> 
>> On 15/08/2013, at 7:39 PM, Harald Schmitt <li...@hschmitt.de
>> <mailto:li...@hschmitt.de>> wrote:
>> 
>>> Am 09.08.2013 03:53, schrieb Adam Murdoch:
>>>> 
>>>> On 08/08/2013, at 12:01 AM, Harald Schmitt <li...@hschmitt.de
>>>> <mailto:li...@hschmitt.de>
>>>> <mailto:li...@hschmitt.de>> wrote:
>>>> 
>>>>> Am 06.08.2013 01:20, schrieb Adam Murdoch:
>>>>>> 
>>>>>> On 05/08/2013, at 9:20 PM, Harald Schmitt <li...@hschmitt.de
>>>>>> <mailto:li...@hschmitt.de>
>>>>>> <mailto:li...@hschmitt.de>
>>>>>> <mailto:li...@hschmitt.de>> wrote:
>>>>>> 
>>>>>>> Hi,
>>>>>>> 
>>>>>>> I did a first try to support symbolic links when using tarTree() for
>>>>>>> untar.
>>>>>>> https://github.com/gradle/gradle/pull/182
>>>>>>> For the other way round, I realized that there are some bits
>>>>>>> missing, to
>>>>>>> implement support for symbolic links with the Tar task type.
>>>>>>> The interface Symlink
>>>>>>> https://github.com/gradle/gradle/blob/master/subprojects/native/src/main/java/org/gradle/internal/nativeplatform/filesystem/Symlink.java
>>>>>>> needs two more functions
>>>>>>> public boolean isSymlink(File linkCandidate);
>>>>>>> public RelativePath symlinkTarget(File link);
>>>>>>> 
>>>>>>> Determining whether it is a symbolic link could be achieved with pure
>>>>>>> java code as the ANT class SymbolicLinkUtils does it, but it could be
>>>>>>> much faster using native tools.
>>>>>>> But to query the target relative path , I don't know whether this
>>>>>>> can be
>>>>>>> done in java?
>>>>>>> 
>>>>>>> I'd need someone to implement the native part. Is there someone
>>>>>>> willing?
>>>>>>> Is this something that will go into gradle?
>>>>>> 
>>>>>> The native toolkit that we use
>>>>>> (https://github.com/adammurdoch/native-platform) already has some
>>>>>> support for symlinks. It's missing a method to detect if a file is a
>>>>>> symlink, but I can add that. It might take me a few days to get it
>>>>>> done,
>>>>>> though.
>>>>>> 
>>>>>> We can also use the Java 7 file attributes stuff to determine if a file
>>>>>> is a symbolic link. There's also the trick where we can use
>>>>>> File.getCanonicalFile() to determine if something is a symlink or not.
>>>>>> 
>>>>>> What you could do to get started is to add the methods that you need on
>>>>>> Symlink with dummy implementations or implementations that only work on
>>>>>> Java 7 or that use the Ant stuff for now. Then you can continue on with
>>>>>> the Tar stuff while I add the native support in the native toolkit and
>>>>>> wire it in.
>>>>> The native toolkit you are referring is not used for symlinks in gradle
>>>>> at the moment, but it makes sense to switch to it.
>>>> 
>>>> We're slowly moving from jna/jna-posix to native-platform, and the plan
>>>> is to switch the Symlink implementation over.
>>> I took a look into NativeServices class and FileSystem class. Is the
>>> plan to provide the FileSystem service from NativeServices?
>>> Because there is a problem with FileSystems.getDefault() which would
>>> introduce a package cycle if it uses NativeServices.
>> 
>> Right. We're going to have to shuffle some things around to make it work.
> Can you give me the direction how this should be done?
> FileSystems.getDefault() could be deprecated and use the old code
> and NativeServices returns a different FileSystem implementation with
> native-platform ?

I wouldn't bother too much with this at the moment. It's fine if this just 
works with Java 7 to start with.

Instead, I think we should make some deeper changes in the FileTree/CopySpec 
area to support symlinks. I've written up a spec, broken up into a few steps, 
or stories, as part of the broader plan for copying.

The first story is here: 
https://github.com/gradle/gradle/blob/master/design-docs/copy-spec-improvements.md#story-allow-symbolic-link-traversal-strategy-to-be-declared-for-a-file-tree

And continues on for a few more after that.

Would you be interested in tackling some of this?


--
Adam Murdoch
Gradle Co-founder
http://www.gradle.org
VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
http://www.gradleware.com

Join us at the Gradle eXchange 2013, Oct 28th in London, UK: 
http://skillsmatter.com/event/java-jee/gradle-exchange-2013



Reply via email to