From ab07d0d86d8b64b4f7c88b45bc81f1eec22105db Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 10 Apr 2014 19:00:05 -0400
Subject: [PATCH] Preserve key index when re-adding an existing key

---
 src/main/java/com/gitblit/transport/ssh/FileKeyManager.java |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java b/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java
index 8a3d2ff..77f818c 100644
--- a/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java
+++ b/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java
@@ -130,7 +130,7 @@
 	public boolean addKey(String username, SshKey key) {
 		try {
 			String newKey = stripCommentFromKey(key.getRawData());
-
+			boolean replaced = false;
 			List<String> lines = new ArrayList<String>();
 			File keystore = getKeystore(username);
 			if (keystore.exists()) {
@@ -147,16 +147,22 @@
 						continue;
 					}
 
-					// only add keys that do not match the new key
 					String oldKey = stripCommentFromKey(line);
-					if (!newKey.equals(oldKey)) {
+					if (newKey.equals(oldKey)) {
+						// replace key
+						lines.add(key.getRawData());
+						replaced = true;
+					} else {
+						// retain key
 						lines.add(entry);
 					}
 				}
 			}
 
-			// add new key
-			lines.add(key.getRawData());
+			if (!replaced) {
+				// new key, append
+				lines.add(key.getRawData());
+			}
 
 			// write keystore
 			String content = Joiner.on("\n").join(lines).trim().concat("\n");

--
Gitblit v1.9.1