Bug 578322 - Provide a more flexible mechanism for managing and locating
PGP public keys

Delegate to DefaultPGPPublicKeyService.getLocalKeyCache(long) when
looking up a key so that even without a key server or when offline,
previously cached keys can be found if present in the local cache.

Change-Id: If45f9871bdaf7507370e0170d49392c2fc356f1c
Signed-off-by: Ed Merks <ed.merks@gmail.com>
Reviewed-on: https://git.eclipse.org/r/c/equinox/rt.equinox.p2/+/190804
diff --git a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/provisional/p2/repository/DefaultPGPPublicKeyService.java b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/provisional/p2/repository/DefaultPGPPublicKeyService.java
index 6ec6632..3aa5019 100644
--- a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/provisional/p2/repository/DefaultPGPPublicKeyService.java
+++ b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/provisional/p2/repository/DefaultPGPPublicKeyService.java
@@ -191,10 +191,7 @@
 			keys.addAll(keyServer.getKeys(keyID));
 		}
 
-		LocalKeyCache localKeyCache = localKeys.get(keyID);
-		if (localKeyCache != null) {
-			keys.addAll(localKeyCache.get());
-		}
+		keys.addAll(getLocalKeyCache(keyID).get());
 
 		keys.addAll(getDefaultKeys(keyID));
 
@@ -300,23 +297,7 @@
 	@Override
 	public PGPPublicKey addKey(PGPPublicKey key) {
 		long keyID = key.getKeyID();
-		LocalKeyCache localKeyCache = localKeys.get(keyID);
-		if (localKeyCache == null) {
-			String hexKeyID = toHex(keyID);
-			Path cache = keyCache.resolve(hexKeyID + ".asc"); //$NON-NLS-1$
-			localKeyCache = new LocalKeyCache(cache) {
-				@Override
-				protected List<PGPPublicKey> reconcileKeys(List<PGPPublicKey> keys) {
-					return DefaultPGPPublicKeyService.this.reconcileKeys(keys);
-				}
-
-				@Override
-				protected void log(Throwable throwable) {
-					DefaultPGPPublicKeyService.this.log(throwable);
-				}
-			};
-			localKeys.put(keyID, localKeyCache);
-		}
+		LocalKeyCache localKeyCache = getLocalKeyCache(keyID);
 		localKeyCache.add(key);
 
 		Collection<PGPPublicKey> keys = getKeys(keyID);
@@ -414,6 +395,27 @@
 		return null;
 	}
 
+	private LocalKeyCache getLocalKeyCache(long keyID) {
+		LocalKeyCache localKeyCache = localKeys.get(keyID);
+		if (localKeyCache == null) {
+			String hexKeyID = toHex(keyID);
+			Path cache = keyCache.resolve(hexKeyID + ".asc"); //$NON-NLS-1$
+			localKeyCache = new LocalKeyCache(cache) {
+				@Override
+				protected List<PGPPublicKey> reconcileKeys(List<PGPPublicKey> keys) {
+					return DefaultPGPPublicKeyService.this.reconcileKeys(keys);
+				}
+
+				@Override
+				protected void log(Throwable throwable) {
+					DefaultPGPPublicKeyService.this.log(throwable);
+				}
+			};
+			localKeys.put(keyID, localKeyCache);
+		}
+		return localKeyCache;
+	}
+
 	protected Collection<PGPPublicKey> fetchKeys(URI uri, Path cache) throws IOException {
 		try {
 			ByteArrayOutputStream reciever = new ByteArrayOutputStream();