From 16e4747d3cb2c2a53a6bef554bca306d8594a080 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 14 Sep 2012 17:51:04 -0400
Subject: [PATCH] Mostly complete blob view line links feature, DOM offset bug remains (issue 130)

---
 src/com/gitblit/ConfigUserService.java |   24 ++++++++++++++++++++----
 1 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/com/gitblit/ConfigUserService.java b/src/com/gitblit/ConfigUserService.java
index 9b0cf57..faad691 100644
--- a/src/com/gitblit/ConfigUserService.java
+++ b/src/com/gitblit/ConfigUserService.java
@@ -279,9 +279,10 @@
 	 */
 	@Override
 	public boolean updateUserModel(String username, UserModel model) {
+		UserModel originalUser = null;
 		try {
 			read();
-			UserModel oldUser = users.remove(username.toLowerCase());
+			originalUser = users.remove(username.toLowerCase());
 			users.put(model.username.toLowerCase(), model);
 			// null check on "final" teams because JSON-sourced UserModel
 			// can have a null teams object
@@ -301,8 +302,8 @@
 				}
 
 				// check for implicit team removal
-				if (oldUser != null) {
-					for (TeamModel team : oldUser.teams) {
+				if (originalUser != null) {
+					for (TeamModel team : originalUser.teams) {
 						if (!model.isTeamMember(team.name)) {
 							team.removeUser(username);
 						}
@@ -312,6 +313,13 @@
 			write();
 			return true;
 		} catch (Throwable t) {
+			if (originalUser != null) {
+				// restore original user
+				users.put(originalUser.username.toLowerCase(), originalUser);
+			} else {
+				// drop attempted add
+				users.remove(model.username.toLowerCase());
+			}
 			logger.error(MessageFormat.format("Failed to update user model {0}!", model.username),
 					t);
 		}
@@ -499,13 +507,21 @@
 	 */
 	@Override
 	public boolean updateTeamModel(String teamname, TeamModel model) {
+		TeamModel original = null;
 		try {
 			read();
-			teams.remove(teamname.toLowerCase());
+			original = teams.remove(teamname.toLowerCase());
 			teams.put(model.name.toLowerCase(), model);
 			write();
 			return true;
 		} catch (Throwable t) {
+			if (original != null) {
+				// restore original team
+				teams.put(original.name.toLowerCase(), original);
+			} else {
+				// drop attempted add
+				teams.remove(model.name.toLowerCase());
+			}
 			logger.error(MessageFormat.format("Failed to update team model {0}!", model.name), t);
 		}
 		return false;

--
Gitblit v1.9.1