Merge branch 'stable-5.3' into stable-5.4

* stable-5.3:
  Prepare 5.3.5-SNAPSHOT builds
  JGit v5.3.4.201908231101-r
  Prepare 5.1.11-SNAPSHOT builds
  JGit v5.1.10.201908230655-r
  Use AtomicReferences to cache user and system level configs
  Fix copy-paste typo in CloneCommand#cleanup
  SystemReader: Use correct constructor of FileBasedConfig

Change-Id: I4422632766fc5554a20f75346c5480b7fb611484
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
diff --git a/org.eclipse.jgit.lfs/.settings/.api_filters b/org.eclipse.jgit.lfs/.settings/.api_filters
index 5b8ece6..def21cd 100644
--- a/org.eclipse.jgit.lfs/.settings/.api_filters
+++ b/org.eclipse.jgit.lfs/.settings/.api_filters
@@ -3,7 +3,7 @@
     <resource path="META-INF/MANIFEST.MF">
         <filter id="924844039">
             <message_arguments>
-                <message_argument value="5.4.1"/>
+                <message_argument value="5.4.2"/>
                 <message_argument value="5.4.0"/>
             </message_arguments>
         </filter>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ccd83fe
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: JGit Target Platform Bundle
+Bundle-SymbolicName: org.eclipse.jgit.target
+Bundle-Version: 5.4.2.qualifier
diff --git a/org.eclipse.jgit/.settings/.api_filters b/org.eclipse.jgit/.settings/.api_filters
index 5ca7c0f..30ff73b 100644
--- a/org.eclipse.jgit/.settings/.api_filters
+++ b/org.eclipse.jgit/.settings/.api_filters
@@ -3,7 +3,7 @@
     <resource path="META-INF/MANIFEST.MF">
         <filter id="924844039">
             <message_arguments>
-                <message_argument value="5.4.1"/>
+                <message_argument value="5.4.2"/>
                 <message_argument value="5.4.0"/>
             </message_arguments>
         </filter>
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
index 0248ba2..9f63d0f 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
@@ -713,7 +713,7 @@ private void cleanup() {
 					FileUtils.delete(gitDir, FileUtils.RECURSIVE
 							| FileUtils.SKIP_MISSING | FileUtils.IGNORE_ERRORS);
 				} else {
-					deleteChildren(directory);
+					deleteChildren(gitDir);
 				}
 			}
 		} catch (IOException e) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
index 8431196..cec75a2 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
@@ -56,6 +56,7 @@
 import java.text.SimpleDateFormat;
 import java.util.Locale;
 import java.util.TimeZone;
+import java.util.concurrent.atomic.AtomicReference;
 
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.errors.CorruptObjectException;
@@ -97,9 +98,9 @@ public abstract class SystemReader {
 	private static class Default extends SystemReader {
 		private volatile String hostname;
 
-		private volatile FileBasedConfig systemConfig;
+		private AtomicReference<FileBasedConfig> systemConfig = new AtomicReference<>();
 
-		private volatile FileBasedConfig userConfig;
+		private volatile AtomicReference<FileBasedConfig> userConfig = new AtomicReference<>();
 
 		@Override
 		public String getenv(String variable) {
@@ -113,10 +114,13 @@ public String getProperty(String key) {
 
 		@Override
 		public FileBasedConfig openSystemConfig(Config parent, FS fs) {
-			if (systemConfig == null) {
-				systemConfig = createSystemConfig(parent, fs);
+			FileBasedConfig c = systemConfig.get();
+			if (c == null) {
+				systemConfig.compareAndSet(null,
+						createSystemConfig(parent, fs));
+				c = systemConfig.get();
 			}
-			return systemConfig;
+			return c;
 		}
 
 		protected FileBasedConfig createSystemConfig(Config parent, FS fs) {
@@ -126,7 +130,7 @@ protected FileBasedConfig createSystemConfig(Config parent, FS fs) {
 					return new FileBasedConfig(parent, configFile, fs);
 				}
 			}
-			return new FileBasedConfig(null, fs) {
+			return new FileBasedConfig(parent, null, fs) {
 				@Override
 				public void load() {
 					// empty, do not load
@@ -142,40 +146,35 @@ public boolean isOutdated() {
 
 		@Override
 		public FileBasedConfig openUserConfig(Config parent, FS fs) {
-			if (userConfig == null) {
-				File home = fs.userHome();
-				userConfig = new FileBasedConfig(parent,
-						new File(home, ".gitconfig"), fs); //$NON-NLS-1$
+			FileBasedConfig c = userConfig.get();
+			if (c == null) {
+				userConfig.compareAndSet(null, new FileBasedConfig(parent,
+						new File(fs.userHome(), ".gitconfig"), fs)); //$NON-NLS-1$
+				c = userConfig.get();
 			}
-			return userConfig;
+			return c;
 		}
 
 		@Override
 		public StoredConfig getSystemConfig()
 				throws IOException, ConfigInvalidException {
-			if (systemConfig == null) {
-				systemConfig = createSystemConfig(null, FS.DETECTED);
-			}
-			if (systemConfig.isOutdated()) {
+			FileBasedConfig c = openSystemConfig(null, FS.DETECTED);
+			if (c.isOutdated()) {
 				LOG.debug("loading system config {}", systemConfig); //$NON-NLS-1$
-				systemConfig.load();
+				c.load();
 			}
-			return systemConfig;
+			return c;
 		}
 
 		@Override
 		public StoredConfig getUserConfig()
 				throws IOException, ConfigInvalidException {
-			if (userConfig == null) {
-				userConfig = openUserConfig(getSystemConfig(), FS.DETECTED);
-			} else {
-				getSystemConfig();
-			}
-			if (userConfig.isOutdated()) {
+			FileBasedConfig c = openUserConfig(getSystemConfig(), FS.DETECTED);
+			if (c.isOutdated()) {
 				LOG.debug("loading user config {}", userConfig); //$NON-NLS-1$
-				userConfig.load();
+				c.load();
 			}
-			return userConfig;
+			return c;
 		}
 
 		@Override