diff options
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse')
5 files changed, 285 insertions, 132 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java index 2cd82df34f..c2005b13ee 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java @@ -168,7 +168,7 @@ public class FS_POSIX extends FS { @Override public boolean canExecute(File f) { - return FileUtil.canExecute(f); + return FileUtils.canExecute(f); } @Override @@ -247,42 +247,42 @@ public class FS_POSIX extends FS { @Override public boolean isSymLink(File path) throws IOException { - return FileUtil.isSymlink(path); + return FileUtils.isSymlink(path); } @Override public long lastModified(File path) throws IOException { - return FileUtil.lastModified(path); + return FileUtils.lastModified(path); } @Override public void setLastModified(File path, long time) throws IOException { - FileUtil.setLastModified(path, time); + FileUtils.setLastModified(path, time); } @Override public long length(File f) throws IOException { - return FileUtil.getLength(f); + return FileUtils.getLength(f); } @Override public boolean exists(File path) { - return FileUtil.exists(path); + return FileUtils.exists(path); } @Override public boolean isDirectory(File path) { - return FileUtil.isDirectory(path); + return FileUtils.isDirectory(path); } @Override public boolean isFile(File path) { - return FileUtil.isFile(path); + return FileUtils.isFile(path); } @Override public boolean isHidden(File path) throws IOException { - return FileUtil.isHidden(path); + return FileUtils.isHidden(path); } @Override @@ -295,7 +295,7 @@ public class FS_POSIX extends FS { */ @Override public Attributes getAttributes(File path) { - return FileUtil.getFileAttributesPosix(this, path); + return FileUtils.getFileAttributesPosix(this, path); } /** @@ -303,7 +303,7 @@ public class FS_POSIX extends FS { */ @Override public File normalize(File file) { - return FileUtil.normalize(file); + return FileUtils.normalize(file); } /** @@ -311,7 +311,7 @@ public class FS_POSIX extends FS { */ @Override public String normalize(String name) { - return FileUtil.normalize(name); + return FileUtils.normalize(name); } /** diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java index 987046cbff..21aafc37de 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java @@ -185,47 +185,47 @@ public class FS_Win32 extends FS { @Override public boolean isSymLink(File path) throws IOException { - return FileUtil.isSymlink(path); + return FileUtils.isSymlink(path); } @Override public long lastModified(File path) throws IOException { - return FileUtil.lastModified(path); + return FileUtils.lastModified(path); } @Override public void setLastModified(File path, long time) throws IOException { - FileUtil.setLastModified(path, time); + FileUtils.setLastModified(path, time); } @Override public long length(File f) throws IOException { - return FileUtil.getLength(f); + return FileUtils.getLength(f); } @Override public boolean exists(File path) { - return FileUtil.exists(path); + return FileUtils.exists(path); } @Override public boolean isDirectory(File path) { - return FileUtil.isDirectory(path); + return FileUtils.isDirectory(path); } @Override public boolean isFile(File path) { - return FileUtil.isFile(path); + return FileUtils.isFile(path); } @Override public boolean isHidden(File path) throws IOException { - return FileUtil.isHidden(path); + return FileUtils.isHidden(path); } @Override public void setHidden(File path, boolean hidden) throws IOException { - FileUtil.setHidden(path, hidden); + FileUtils.setHidden(path, hidden); } /** @@ -233,6 +233,6 @@ public class FS_Win32 extends FS { */ @Override public Attributes getAttributes(File path) { - return FileUtil.getFileAttributesBasic(this, path); + return FileUtils.getFileAttributesBasic(this, path); } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java index 7933dcd314..2952b65202 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java @@ -170,47 +170,47 @@ public class FS_Win32_Cygwin extends FS_Win32 { @Override public boolean isSymLink(File path) throws IOException { - return FileUtil.isSymlink(path); + return FileUtils.isSymlink(path); } @Override public long lastModified(File path) throws IOException { - return FileUtil.lastModified(path); + return FileUtils.lastModified(path); } @Override public void setLastModified(File path, long time) throws IOException { - FileUtil.setLastModified(path, time); + FileUtils.setLastModified(path, time); } @Override public long length(File f) throws IOException { - return FileUtil.getLength(f); + return FileUtils.getLength(f); } @Override public boolean exists(File path) { - return FileUtil.exists(path); + return FileUtils.exists(path); } @Override public boolean isDirectory(File path) { - return FileUtil.isDirectory(path); + return FileUtils.isDirectory(path); } @Override public boolean isFile(File path) { - return FileUtil.isFile(path); + return FileUtils.isFile(path); } @Override public boolean isHidden(File path) throws IOException { - return FileUtil.isHidden(path); + return FileUtils.isHidden(path); } @Override public void setHidden(File path, boolean hidden) throws IOException { - FileUtil.setHidden(path, hidden); + FileUtils.setHidden(path, hidden); } /** @@ -218,7 +218,7 @@ public class FS_Win32_Cygwin extends FS_Win32 { */ @Override public Attributes getAttributes(File path) { - return FileUtil.getFileAttributesBasic(this, path); + return FileUtils.getFileAttributesBasic(this, path); } /** diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtil.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtil.java index fd53a95b5a..b87b9a41d3 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtil.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtil.java @@ -46,22 +46,13 @@ package org.eclipse.jgit.util; import java.io.File; import java.io.IOException; import java.nio.file.Files; -import java.nio.file.LinkOption; -import java.nio.file.Path; -import java.nio.file.attribute.BasicFileAttributeView; -import java.nio.file.attribute.BasicFileAttributes; -import java.nio.file.attribute.FileTime; -import java.nio.file.attribute.PosixFileAttributeView; -import java.nio.file.attribute.PosixFileAttributes; -import java.nio.file.attribute.PosixFilePermission; -import java.text.Normalizer; -import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.util.FS.Attributes; /** * File utilities using Java 7 NIO2 */ +@Deprecated public class FileUtil { /** @@ -92,102 +83,116 @@ public class FileUtil { /** * @param path * @return {@code true} if the passed path is a symlink + * @deprecated Use {@link Files#isSymbolicLink(java.nio.file.Path)} instead */ + @Deprecated public static boolean isSymlink(File path) { - Path nioPath = path.toPath(); - return Files.isSymbolicLink(nioPath); + return FileUtils.isSymlink(path); } /** * @param path * @return lastModified attribute for given path * @throws IOException + * @deprecated Use + * {@link Files#getLastModifiedTime(java.nio.file.Path, java.nio.file.LinkOption...)} + * instead */ + @Deprecated public static long lastModified(File path) throws IOException { - Path nioPath = path.toPath(); - return Files.getLastModifiedTime(nioPath, LinkOption.NOFOLLOW_LINKS) - .toMillis(); + return FileUtils.lastModified(path); } /** * @param path * @param time * @throws IOException + * @deprecated Use + * {@link Files#setLastModifiedTime(java.nio.file.Path, java.nio.file.attribute.FileTime)} + * instead */ + @Deprecated public static void setLastModified(File path, long time) throws IOException { - Path nioPath = path.toPath(); - Files.setLastModifiedTime(nioPath, FileTime.fromMillis(time)); + FileUtils.setLastModified(path, time); } /** * @param path * @return {@code true} if the given path exists + * @deprecated Use + * {@link Files#exists(java.nio.file.Path, java.nio.file.LinkOption...)} + * instead */ + @Deprecated public static boolean exists(File path) { - Path nioPath = path.toPath(); - return Files.exists(nioPath, LinkOption.NOFOLLOW_LINKS); + return FileUtils.exists(path); } /** * @param path * @return {@code true} if the given path is hidden * @throws IOException + * @deprecated Use {@link Files#isHidden(java.nio.file.Path)} instead */ + @Deprecated public static boolean isHidden(File path) throws IOException { - Path nioPath = path.toPath(); - return Files.isHidden(nioPath); + return FileUtils.isHidden(path); } /** * @param path * @param hidden * @throws IOException + * @deprecated Use {@link FileUtils#setHidden(File,boolean)} instead */ + @Deprecated public static void setHidden(File path, boolean hidden) throws IOException { - Path nioPath = path.toPath(); - Files.setAttribute(nioPath, "dos:hidden", Boolean.valueOf(hidden), //$NON-NLS-1$ - LinkOption.NOFOLLOW_LINKS); + FileUtils.setHidden(path, hidden); } /** * @param path * @return length of the given file * @throws IOException + * @deprecated Use {@link FileUtils#getLength(File)} instead */ + @Deprecated public static long getLength(File path) throws IOException { - Path nioPath = path.toPath(); - if (Files.isSymbolicLink(nioPath)) - return Files.readSymbolicLink(nioPath).toString() - .getBytes(Constants.CHARSET).length; - return Files.size(nioPath); + return FileUtils.getLength(path); } /** * @param path * @return {@code true} if the given file a directory + * @deprecated Use + * {@link Files#isDirectory(java.nio.file.Path, java.nio.file.LinkOption...)} + * instead */ + @Deprecated public static boolean isDirectory(File path) { - Path nioPath = path.toPath(); - return Files.isDirectory(nioPath, LinkOption.NOFOLLOW_LINKS); + return FileUtils.isDirectory(path); } /** * @param path * @return {@code true} if the given file is a file + * @deprecated Use + * {@link Files#isRegularFile(java.nio.file.Path, java.nio.file.LinkOption...)} + * instead */ + @Deprecated public static boolean isFile(File path) { - Path nioPath = path.toPath(); - return Files.isRegularFile(nioPath, LinkOption.NOFOLLOW_LINKS); + return FileUtils.isFile(path); } /** * @param path * @return {@code true} if the given file can be executed + * @deprecated Use {@link FileUtils#canExecute(File)} instead */ + @Deprecated public static boolean canExecute(File path) { - if (!isFile(path)) - return false; - return path.canExecute(); + return FileUtils.canExecute(path); } /** @@ -200,90 +205,35 @@ public class FileUtil { FileUtils.delete(path); } - static Attributes getFileAttributesBasic(FS fs, File path) { - try { - Path nioPath = path.toPath(); - BasicFileAttributes readAttributes = nioPath - .getFileSystem() - .provider() - .getFileAttributeView(nioPath, - BasicFileAttributeView.class, - LinkOption.NOFOLLOW_LINKS).readAttributes(); - Attributes attributes = new Attributes(fs, path, - true, - readAttributes.isDirectory(), - fs.supportsExecute() ? path.canExecute() : false, - readAttributes.isSymbolicLink(), - readAttributes.isRegularFile(), // - readAttributes.creationTime().toMillis(), // - readAttributes.lastModifiedTime().toMillis(), - readAttributes.isSymbolicLink() ? Constants - .encode(FileUtils.readSymLink(path)).length - : readAttributes.size()); - return attributes; - } catch (IOException e) { - return new Attributes(path, fs); - } - } - /** * @param fs * @param path * @return file system attributes for the given file + * @deprecated Use {@link FileUtils#getFileAttributesPosix(FS,File)} instead */ + @Deprecated public static Attributes getFileAttributesPosix(FS fs, File path) { - try { - Path nioPath = path.toPath(); - PosixFileAttributes readAttributes = nioPath - .getFileSystem() - .provider() - .getFileAttributeView(nioPath, - PosixFileAttributeView.class, - LinkOption.NOFOLLOW_LINKS).readAttributes(); - Attributes attributes = new Attributes( - fs, - path, - true, // - readAttributes.isDirectory(), // - readAttributes.permissions().contains( - PosixFilePermission.OWNER_EXECUTE), - readAttributes.isSymbolicLink(), - readAttributes.isRegularFile(), // - readAttributes.creationTime().toMillis(), // - readAttributes.lastModifiedTime().toMillis(), - readAttributes.size()); - return attributes; - } catch (IOException e) { - return new Attributes(path, fs); - } + return FileUtils.getFileAttributesPosix(fs, path); } /** * @param file * @return on Mac: NFC normalized {@link File}, otherwise the passed file + * @deprecated Use {@link FileUtils#normalize(File)} instead */ + @Deprecated public static File normalize(File file) { - if (SystemReader.getInstance().isMacOS()) { - // TODO: Would it be faster to check with isNormalized first - // assuming normalized paths are much more common - String normalized = Normalizer.normalize(file.getPath(), - Normalizer.Form.NFC); - return new File(normalized); - } - return file; + return FileUtils.normalize(file); } /** * @param name * @return on Mac: NFC normalized form of given name + * @deprecated Use {@link FileUtils#normalize(String)} instead */ + @Deprecated public static String normalize(String name) { - if (SystemReader.getInstance().isMacOS()) { - if (name == null) - return null; - return Normalizer.normalize(name, Normalizer.Form.NFC); - } - return name; + return FileUtils.normalize(name); } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java index 4fa249226e..548d239c8d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java @@ -54,6 +54,12 @@ import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.BasicFileAttributeView; +import java.nio.file.attribute.BasicFileAttributes; +import java.nio.file.attribute.FileTime; +import java.nio.file.attribute.PosixFileAttributeView; +import java.nio.file.attribute.PosixFileAttributes; +import java.nio.file.attribute.PosixFilePermission; import java.text.MessageFormat; import java.text.Normalizer; import java.text.Normalizer.Form; @@ -62,6 +68,8 @@ import java.util.List; import java.util.regex.Pattern; import org.eclipse.jgit.internal.JGitText; +import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.util.FS.Attributes; /** * File Utilities @@ -527,4 +535,199 @@ public class FileUtils { return msg != null && msg.toLowerCase().matches("stale .*file .*handle"); //$NON-NLS-1$ } + + /** + * @param file + * @return {@code true} if the passed file is a symbolic link + */ + static boolean isSymlink(File file) { + return Files.isSymbolicLink(file.toPath()); + } + + /** + * @param file + * @return lastModified attribute for given file, not following symbolic + * links + * @throws IOException + */ + static long lastModified(File file) throws IOException { + return Files.getLastModifiedTime(file.toPath(), LinkOption.NOFOLLOW_LINKS) + .toMillis(); + } + + /** + * @param file + * @param time + * @throws IOException + */ + static void setLastModified(File file, long time) throws IOException { + Files.setLastModifiedTime(file.toPath(), FileTime.fromMillis(time)); + } + + /** + * @param file + * @return {@code true} if the given file exists, not following symbolic + * links + */ + static boolean exists(File file) { + return Files.exists(file.toPath(), LinkOption.NOFOLLOW_LINKS); + } + + /** + * @param file + * @return {@code true} if the given file is hidden + * @throws IOException + */ + static boolean isHidden(File file) throws IOException { + return Files.isHidden(file.toPath()); + } + + /** + * @param file + * @param hidden + * @throws IOException + * @since 4.1 + */ + public static void setHidden(File file, boolean hidden) throws IOException { + Files.setAttribute(file.toPath(), "dos:hidden", Boolean.valueOf(hidden), //$NON-NLS-1$ + LinkOption.NOFOLLOW_LINKS); + } + + /** + * @param file + * @return length of the given file + * @throws IOException + * @since 4.1 + */ + public static long getLength(File file) throws IOException { + Path nioPath = file.toPath(); + if (Files.isSymbolicLink(nioPath)) + return Files.readSymbolicLink(nioPath).toString() + .getBytes(Constants.CHARSET).length; + return Files.size(nioPath); + } + + /** + * @param file + * @return {@code true} if the given file is a directory, not following + * symbolic links + */ + static boolean isDirectory(File file) { + return Files.isDirectory(file.toPath(), LinkOption.NOFOLLOW_LINKS); + } + + /** + * @param file + * @return {@code true} if the given file is a file, not following symbolic + * links + */ + static boolean isFile(File file) { + return Files.isRegularFile(file.toPath(), LinkOption.NOFOLLOW_LINKS); + } + + /** + * @param file + * @return {@code true} if the given file can be executed + * @since 4.1 + */ + public static boolean canExecute(File file) { + if (!isFile(file)) { + return false; + } + return Files.isExecutable(file.toPath()); + } + + /** + * @param fs + * @param file + * @return non null attributes object + */ + static Attributes getFileAttributesBasic(FS fs, File file) { + try { + Path nioPath = file.toPath(); + BasicFileAttributes readAttributes = nioPath + .getFileSystem() + .provider() + .getFileAttributeView(nioPath, + BasicFileAttributeView.class, + LinkOption.NOFOLLOW_LINKS).readAttributes(); + Attributes attributes = new Attributes(fs, file, + true, + readAttributes.isDirectory(), + fs.supportsExecute() ? file.canExecute() : false, + readAttributes.isSymbolicLink(), + readAttributes.isRegularFile(), // + readAttributes.creationTime().toMillis(), // + readAttributes.lastModifiedTime().toMillis(), + readAttributes.isSymbolicLink() ? Constants + .encode(readSymLink(file)).length + : readAttributes.size()); + return attributes; + } catch (IOException e) { + return new Attributes(file, fs); + } + } + + /** + * @param fs + * @param file + * @return file system attributes for the given file + * @since 4.1 + */ + public static Attributes getFileAttributesPosix(FS fs, File file) { + try { + Path nioPath = file.toPath(); + PosixFileAttributes readAttributes = nioPath + .getFileSystem() + .provider() + .getFileAttributeView(nioPath, + PosixFileAttributeView.class, + LinkOption.NOFOLLOW_LINKS).readAttributes(); + Attributes attributes = new Attributes( + fs, + file, + true, // + readAttributes.isDirectory(), // + readAttributes.permissions().contains( + PosixFilePermission.OWNER_EXECUTE), + readAttributes.isSymbolicLink(), + readAttributes.isRegularFile(), // + readAttributes.creationTime().toMillis(), // + readAttributes.lastModifiedTime().toMillis(), + readAttributes.size()); + return attributes; + } catch (IOException e) { + return new Attributes(file, fs); + } + } + + /** + * @param file + * @return on Mac: NFC normalized {@link File}, otherwise the passed file + * @since 4.1 + */ + public static File normalize(File file) { + if (SystemReader.getInstance().isMacOS()) { + // TODO: Would it be faster to check with isNormalized first + // assuming normalized paths are much more common + String normalized = Normalizer.normalize(file.getPath(), + Normalizer.Form.NFC); + return new File(normalized); + } + return file; + } + + /** + * @param name + * @return on Mac: NFC normalized form of given name + * @since 4.1 + */ + public static String normalize(String name) { + if (SystemReader.getInstance().isMacOS()) { + if (name == null) + return null; + return Normalizer.normalize(name, Normalizer.Form.NFC); + } + return name; + } } |