On 15/08/2013, at 7:39 PM, Harald Schmitt <[email protected]> wrote:
> Am 09.08.2013 03:53, schrieb Adam Murdoch: >> >> On 08/08/2013, at 12:01 AM, Harald Schmitt <[email protected] >> <mailto:[email protected]>> wrote: >> >>> Am 06.08.2013 01:20, schrieb Adam Murdoch: >>>> >>>> On 05/08/2013, at 9:20 PM, Harald Schmitt <[email protected] >>>> <mailto:[email protected]> >>>> <mailto:[email protected]>> 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. -- Adam Murdoch Gradle Co-founder http://www.gradle.org VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting http://www.gradleware.com
