From f01bc58183dca2378ffe931315396583d053c6be Mon Sep 17 00:00:00 2001 From: James Moger Date: Tue, 16 Jul 2013 09:35:31 -0400 Subject: [PATCH] Reset dashboard and activity commit cache on branch REWIND or DELETE --- releases.moxie | 1 + src/main/java/com/gitblit/git/ReceiveHook.java | 17 +++++++++++++++++ .../java/com/gitblit/utils/CommitCache.java | 17 +++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/releases.moxie b/releases.moxie index 711bf146..bff4eb17 100644 --- a/releases.moxie +++ b/releases.moxie @@ -13,6 +13,7 @@ r18: { - Gitblit-as-viewer with no repository urls failed to display summary page (issue 269) - Fixed missing model class dependencies in Gitblit Manager build - Fix for IE10 compatability mode + - Reset dashboard and activity commit cache on branch REWIND or DELETE changes: ~ additions: ~ dependencyChanges: ~ 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. * -- 2.39.5