Define a default CredentialsProvider

This permits applications to set their preferred credentials UI
implementation once, rather than needing to define it on every
single Transport instance they open.

Change-Id: I010550de1a6becab27f7aa5a9901df5a1c7e74bd
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/CredentialsProvider.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/CredentialsProvider.java
index d2130ad..ca83c69 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/CredentialsProvider.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/CredentialsProvider.java
@@ -63,6 +63,23 @@
  * @see UsernamePasswordCredentialsProvider
  */
 public abstract class CredentialsProvider {
+	private static volatile CredentialsProvider defaultProvider;
+
+	/** @return the default credentials provider, or null. */
+	public static CredentialsProvider getDefault() {
+		return defaultProvider;
+	}
+
+	/**
+	 * Set the default credentials provider.
+	 *
+	 * @param p
+	 *            the new default provider, may be null to select no default.
+	 */
+	public static void setDefault(CredentialsProvider p) {
+		defaultProvider = p;
+	}
+
 	/**
 	 * Check if the provider can supply the necessary {@link CredentialItem}s.
 	 *
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java
index 5895f7f..69eea0c 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java
@@ -577,6 +577,7 @@ protected Transport(final Repository local, final URIish uri) {
 		this.local = local;
 		this.uri = uri;
 		this.checkFetchedObjects = tc.isFsckObjects();
+		this.credentialsProvider = CredentialsProvider.getDefault();
 	}
 
 	/**