Browse Source

Fix FileSnapshot#save(long) and FileSnapshot#save(Instant)

Use the fallback timestamp resolution as already described in the
javadoc of these methods. Using zero file timestamp resolution doesn't
make sense.

Change-Id: Iaad2a0f99c3be3678e94980a0a368181b6aed38c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
stable-5.1
Matthias Sohn 5 years ago
parent
commit
275f3da783
  1. 8
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileSnapshot.java
  2. 9
      org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java

8
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileSnapshot.java

@ -44,7 +44,7 @@
package org.eclipse.jgit.internal.storage.file; package org.eclipse.jgit.internal.storage.file;
import static org.eclipse.jgit.util.FS.FileStoreAttributes.FALLBACK_FILESTORE_ATTRIBUTES; import static org.eclipse.jgit.util.FS.FileStoreAttributes.FALLBACK_FILESTORE_ATTRIBUTES;
import static org.eclipse.jgit.util.FS.FileStoreAttributes.FALLBACK_TIMESTAMP_RESOLUTION;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.BasicFileAttributes;
@ -176,7 +176,7 @@ public class FileSnapshot {
public static FileSnapshot save(long modified) { public static FileSnapshot save(long modified) {
final Instant read = Instant.now(); final Instant read = Instant.now();
return new FileSnapshot(read, Instant.ofEpochMilli(modified), return new FileSnapshot(read, Instant.ofEpochMilli(modified),
UNKNOWN_SIZE, Duration.ZERO, MISSING_FILEKEY); UNKNOWN_SIZE, FALLBACK_TIMESTAMP_RESOLUTION, MISSING_FILEKEY);
} }
/** /**
@ -196,8 +196,8 @@ public class FileSnapshot {
*/ */
public static FileSnapshot save(Instant modified) { public static FileSnapshot save(Instant modified) {
final Instant read = Instant.now(); final Instant read = Instant.now();
return new FileSnapshot(read, modified, UNKNOWN_SIZE, Duration.ZERO, return new FileSnapshot(read, modified, UNKNOWN_SIZE,
MISSING_FILEKEY); FALLBACK_TIMESTAMP_RESOLUTION, MISSING_FILEKEY);
} }
/** Last observed modification time of the path. */ /** Last observed modification time of the path. */

9
org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java

@ -213,13 +213,20 @@ public abstract class FS {
private static final Duration UNDEFINED_DURATION = Duration private static final Duration UNDEFINED_DURATION = Duration
.ofNanos(Long.MAX_VALUE); .ofNanos(Long.MAX_VALUE);
/**
* Fallback filesystem timestamp resolution. The worst case timestamp
* resolution on FAT filesystems is 2 seconds.
*/
public static final Duration FALLBACK_TIMESTAMP_RESOLUTION = Duration
.ofMillis(2000);
/** /**
* Fallback FileStore attributes used when we can't measure the * Fallback FileStore attributes used when we can't measure the
* filesystem timestamp resolution. The last modified time granularity * filesystem timestamp resolution. The last modified time granularity
* of FAT filesystems is 2 seconds. * of FAT filesystems is 2 seconds.
*/ */
public static final FileStoreAttributes FALLBACK_FILESTORE_ATTRIBUTES = new FileStoreAttributes( public static final FileStoreAttributes FALLBACK_FILESTORE_ATTRIBUTES = new FileStoreAttributes(
Duration.ofMillis(2000)); FALLBACK_TIMESTAMP_RESOLUTION);
private static final Map<FileStore, FileStoreAttributes> attributeCache = new ConcurrentHashMap<>(); private static final Map<FileStore, FileStoreAttributes> attributeCache = new ConcurrentHashMap<>();

Loading…
Cancel
Save