Browse Source

Restore original team or user object on failure to update (issue 118)

tags/v1.1.0
James Moger 11 years ago
parent
commit
2987f602e1
2 changed files with 15 additions and 4 deletions
  1. 1
    0
      docs/04_releases.mkd
  2. 14
    4
      src/com/gitblit/ConfigUserService.java

+ 1
- 0
docs/04_releases.mkd View File

@@ -11,6 +11,7 @@ If you are updating from an earlier release AND you have indexed branches with t
#### fixes
- Restore original user or team object on failure to update (issue 118)
- Repository URL uses `X-Forwarded-Proto` and `X-Forwarded-Port`, if available, for reverse proxy configurations (issue 115)
- Fixes to relative path determination in repository searh algorithm for symlinks (issue 116)
- Output real RAW content, not simulated RAW content (issue 114)

+ 14
- 4
src/com/gitblit/ConfigUserService.java View File

@@ -279,9 +279,10 @@ public class ConfigUserService implements IUserService {
*/
@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 @@ public class ConfigUserService implements IUserService {
}
// 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,10 @@ public class ConfigUserService implements IUserService {
write();
return true;
} catch (Throwable t) {
if (originalUser != null) {
// restore original user
users.put(originalUser.username, originalUser);
}
logger.error(MessageFormat.format("Failed to update user model {0}!", model.username),
t);
}
@@ -499,13 +504,18 @@ public class ConfigUserService implements IUserService {
*/
@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, original);
}
logger.error(MessageFormat.format("Failed to update team model {0}!", model.name), t);
}
return false;

Loading…
Cancel
Save