From f01bc58183dca2378ffe931315396583d053c6be Mon Sep 17 00:00:00 2001 From: James Moger Date: Tue, 16 Jul 2013 09:35:31 -0400 Subject: Reset dashboard and activity commit cache on branch REWIND or DELETE --- src/main/java/com/gitblit/git/ReceiveHook.java | 17 +++++++++++++++++ src/main/java/com/gitblit/utils/CommitCache.java | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/com/gitblit/git/ReceiveHook.java b/src/main/java/com/gitblit/git/ReceiveHook.java index e0b77987..d75a2385 100644 --- a/src/main/java/com/gitblit/git/ReceiveHook.java +++ b/src/main/java/com/gitblit/git/ReceiveHook.java @@ -36,6 +36,7 @@ import org.eclipse.jgit.transport.ReceivePack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.gitblit.Constants; import com.gitblit.Constants.AccessRestrictionType; import com.gitblit.GitBlit; import com.gitblit.Keys; @@ -44,6 +45,7 @@ import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.ClientLogger; +import com.gitblit.utils.CommitCache; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.RefLogUtils; import com.gitblit.utils.StringUtils; @@ -186,6 +188,21 @@ public class ReceiveHook implements PreReceiveHook, PostReceiveHook { return; } } + + // reset branch commit cache on REWIND and DELETE + for (ReceiveCommand cmd : commands) { + String ref = cmd.getRefName(); + if (ref.startsWith(Constants.R_HEADS)) { + switch (cmd.getType()) { + case UPDATE_NONFASTFORWARD: + case DELETE: + CommitCache.instance().clear(repository.name, ref); + break; + default: + break; + } + } + } Set scripts = new LinkedHashSet(); scripts.addAll(GitBlit.self().getPreReceiveScriptsInherited(repository)); diff --git a/src/main/java/com/gitblit/utils/CommitCache.java b/src/main/java/com/gitblit/utils/CommitCache.java index 9db5f0c9..e84506ea 100644 --- a/src/main/java/com/gitblit/utils/CommitCache.java +++ b/src/main/java/com/gitblit/utils/CommitCache.java @@ -109,6 +109,23 @@ public class CommitCache { } } + /** + * Clears the commit cache for a specific branch of a specific repository. + * + * @param repositoryName + * @param branch + */ + public void clear(String repositoryName, String branch) { + String repoKey = repositoryName.toLowerCase(); + ObjectCache> repoCache = cache.get(repoKey); + if (repoCache != null) { + List commits = repoCache.remove(branch.toLowerCase()); + if (!ArrayUtils.isEmpty(commits)) { + logger.info(MessageFormat.format("{0}:{1} commit cache cleared", repositoryName, branch)); + } + } + } + /** * Get all commits for the specified repository:branch that are in the cache. * -- cgit v1.2.3