jgit/org.eclipse.jgit/.settings
Matthias Sohn 16760c3e9a Persist filesystem timestamp resolution and allow manual configuration
To enable persisting filesystem timestamp resolution per FileStore add a
new config section to the user global git configuration:

- Config section is "filesystem"
- Config subsection is concatenation of
  - Java vendor (system property "java.vm.vendor")
  - runtime version (system property "java.vm.version")
  - FileStore's name
  - separated by '|'
  e.g.
    "AdoptOpenJDK|1.8.0_212-b03|/dev/disk1s1"
  The prefix is needed since some Java versions do not expose the full
  timestamp resolution of the underlying filesystem. This may also
  depend on the underlying operating system hence concrete key values
  may not be portable.
- Config key for timestamp resolution is "timestampResolution" as a time
  value, supported time units are those supported by
  DefaultTypedConfigGetter#getTimeUnit

If timestamp resolution is already configured for a given FileStore
the configured value is used instead of measuring the resolution.

When timestamp resolution was measured it is persisted in the user
global git configuration.

Example:

[filesystem "AdoptOpenJDK|1.8.0_212-b03|/dev/disk1s1"]
	timestampResolution = 1 seconds

If locking the git config file fails retry saving the resolution up to 5
times in order to workaround races with another thread.

In order to avoid stack overflow use the fallback filesystem timestamp
resolution when loading FileBasedConfig which creates itself a
FileSnapshot to help checking if the config changed.

Note:
- on some OSes Java 8,9 truncate to milliseconds or seconds, see
https://bugs.openjdk.java.net/browse/JDK-8177809, fixed in Java 10
- UnixFileAttributes up to Java 12 truncates timestamp resolution to
microseconds when converting the internal representation to FileTime
exposed in the API, see https://bugs.openjdk.java.net/browse/JDK-8181493
- WindowsFileAttributes also provides only microsecond resolution up to
Java 12

Hence do not attempt to manually configure a higher timestamp resolution
than supported by the Java version being used at runtime.

Bug: 546891
Bug: 548188
Change-Id: Iff91b8f9e6e5e2295e1463f87c8e95edf4abbcf8
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
2019-07-17 09:42:14 +02:00
..
.api_filters Persist filesystem timestamp resolution and allow manual configuration 2019-07-17 09:42:14 +02:00
org.eclipse.core.resources.prefs Initial JGit contribution to eclipse.org 2009-09-29 16:47:03 -07:00
org.eclipse.core.runtime.prefs Fix line endings 2010-06-18 23:36:18 +02:00
org.eclipse.jdt.core.prefs Enable warning for resources not managed by try-with-resource 2018-03-03 23:58:47 +01:00
org.eclipse.jdt.ui.prefs Partially revert c0ad77d8 "Enhance Eclipse save actions" 2017-08-30 03:07:18 +02:00
org.eclipse.mylyn.tasks.ui.prefs Use commit message best practices for Mylyn Commit template 2011-09-05 23:57:21 +02:00
org.eclipse.mylyn.team.ui.prefs Use commit message best practices for Mylyn Commit template 2011-09-05 23:57:21 +02:00
org.eclipse.pde.api.tools.prefs Ignore warning for minor version change without API change 2017-11-24 01:12:14 +01:00
org.eclipse.pde.core.prefs Adding PDE API Tools nature to JGit 2010-01-16 10:00:30 -06:00