From f5fa7958b07d0e585542b712b13f7ad9b47a8be9 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 23 Dec 2011 08:28:15 -0500 Subject: [PATCH] Improved logging of GitblitUserService --- src/com/gitblit/FederationPullExecutor.java | 80 +++++++++++++++++++++++++++------------ 1 files changed, 55 insertions(+), 25 deletions(-) diff --git a/src/com/gitblit/FederationPullExecutor.java b/src/com/gitblit/FederationPullExecutor.java index ef089d0..2976c40 100644 --- a/src/com/gitblit/FederationPullExecutor.java +++ b/src/com/gitblit/FederationPullExecutor.java @@ -19,6 +19,7 @@ import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; import java.net.InetAddress; import java.text.MessageFormat; import java.util.ArrayList; @@ -43,8 +44,10 @@ import com.gitblit.Constants.FederationPullStatus; import com.gitblit.Constants.FederationStrategy; +import com.gitblit.GitBlitException.ForbiddenException; import com.gitblit.models.FederationModel; import com.gitblit.models.RepositoryModel; +import com.gitblit.models.TeamModel; import com.gitblit.models.UserModel; import com.gitblit.utils.FederationUtils; import com.gitblit.utils.JGitUtils; @@ -81,8 +84,8 @@ * * @param registrations * @param isDaemon - * if true, registrations are rescheduled in perpetuity. if false, - * the federation pull operation is executed once. + * if true, registrations are rescheduled in perpetuity. if + * false, the federation pull operation is executed once. */ public FederationPullExecutor(List<FederationModel> registrations, boolean isDaemon) { this.registrations = registrations; @@ -110,7 +113,7 @@ String message = "Federation pull of " + registration.name + " @ " + registration.url + " is now at " + is.name(); GitBlit.self() - .notifyAdministrators( + .sendMailToAdministrators( "Pull Status of " + registration.name + " is " + is.name(), message); } @@ -169,7 +172,7 @@ } else { repositoryName = registrationFolder + "/" + repository.name; } - + if (registration.bare) { // bare repository, ensure .git suffix if (!repositoryName.toLowerCase().endsWith(DOT_GIT_EXT)) { @@ -178,7 +181,8 @@ } else { // normal repository, strip .git suffix if (repositoryName.toLowerCase().endsWith(DOT_GIT_EXT)) { - repositoryName = repositoryName.substring(0, repositoryName.indexOf(DOT_GIT_EXT)); + repositoryName = repositoryName.substring(0, + repositoryName.indexOf(DOT_GIT_EXT)); } } @@ -190,7 +194,8 @@ StoredConfig config = existingRepository.getConfig(); config.load(); String origin = config.getString("remote", "origin", "url"); - RevCommit commit = JGitUtils.getCommit(existingRepository, "refs/remotes/origin/master"); + RevCommit commit = JGitUtils.getCommit(existingRepository, + "refs/remotes/origin/master"); if (commit != null) { fetchHead = commit.getName(); } @@ -209,7 +214,7 @@ Constants.FEDERATION_USER, registration.token); logger.info(MessageFormat.format("Pulling federated repository {0} from {1} @ {2}", repository.name, registration.name, registration.url)); - + CloneResult result = JGitUtils.cloneRepository(registrationFolderFile, repository.name, cloneUrl, registration.bare, credentials); Repository r = GitBlit.self().getRepository(repositoryName); @@ -255,7 +260,7 @@ // preserve local settings repository.isFrozen = rm.isFrozen; repository.federationStrategy = rm.federationStrategy; - + // merge federation sets Set<String> federationSets = new HashSet<String>(); if (rm.federationSets != null) { @@ -278,12 +283,14 @@ try { // Pull USERS + // TeamModels are automatically pulled because they are contained + // within the UserModel. The UserService creates unknown teams + // and updates existing teams. Collection<UserModel> users = FederationUtils.getUsers(registration); if (users != null && users.size() > 0) { - File realmFile = new File(registrationFolderFile, registration.name - + "_users.properties"); + File realmFile = new File(registrationFolderFile, registration.name + "_users.conf"); realmFile.delete(); - FileUserService userService = new FileUserService(realmFile); + ConfigUserService userService = new ConfigUserService(realmFile); for (UserModel user : users) { userService.updateUserModel(user.username, user); @@ -314,16 +321,40 @@ localUser.canAdmin = user.canAdmin; GitBlit.self().updateUserModel(localUser.username, localUser, false); } + + for (String teamname : GitBlit.self().getAllTeamnames()) { + TeamModel team = GitBlit.self().getTeamModel(teamname); + if (user.isTeamMember(teamname) && !team.hasUser(user.username)) { + // new team member + team.addUser(user.username); + GitBlit.self().updateTeamModel(teamname, team, false); + } else if (!user.isTeamMember(teamname) && team.hasUser(user.username)) { + // remove team member + team.removeUser(user.username); + GitBlit.self().updateTeamModel(teamname, team, false); + } + + // update team repositories + TeamModel remoteTeam = user.getTeam(teamname); + if (remoteTeam != null && remoteTeam.repositories != null) { + int before = team.repositories.size(); + team.addRepositories(remoteTeam.repositories); + int after = team.repositories.size(); + if (after > before) { + // repository count changed, update + GitBlit.self().updateTeamModel(teamname, team, false); + } + } + } } } } - } catch (Exception e) { - // a 403 error code is normal for a PULL_REPOSITORIES token - if (!e.getMessage().contains("403")) { - logger.warn(MessageFormat.format( - "Failed to retrieve USERS from federated gitblit ({0} @ {1})", - registration.name, registration.url), e); - } + } catch (ForbiddenException e) { + // ignore forbidden exceptions + } catch (IOException e) { + logger.warn(MessageFormat.format( + "Failed to retrieve USERS from federated gitblit ({0} @ {1})", + registration.name, registration.url), e); } try { @@ -337,13 +368,12 @@ properties.store(os, null); os.close(); } - } catch (Exception e) { - // a 403 error code is normal for a PULL_REPOSITORIES token - if (!e.getMessage().contains("403")) { - logger.warn(MessageFormat.format( - "Failed to retrieve SETTINGS from federated gitblit ({0} @ {1})", - registration.name, registration.url), e); - } + } catch (ForbiddenException e) { + // ignore forbidden exceptions + } catch (IOException e) { + logger.warn(MessageFormat.format( + "Failed to retrieve SETTINGS from federated gitblit ({0} @ {1})", + registration.name, registration.url), e); } } -- Gitblit v1.9.1