diff options
author | James Moger <james.moger@gitblit.com> | 2013-07-16 09:35:31 -0400 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2013-07-16 09:35:31 -0400 |
commit | f01bc58183dca2378ffe931315396583d053c6be (patch) | |
tree | f7be4abdf4d3116890e144ff350195b12e92a173 /src/main/java | |
parent | f10286ce6371624fb49486202f14d3f75f866cc4 (diff) | |
download | gitblit-f01bc58183dca2378ffe931315396583d053c6be.tar.gz gitblit-f01bc58183dca2378ffe931315396583d053c6be.zip |
Reset dashboard and activity commit cache on branch REWIND or DELETE
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/gitblit/git/ReceiveHook.java | 17 | ||||
-rw-r--r-- | src/main/java/com/gitblit/utils/CommitCache.java | 17 |
2 files changed, 34 insertions, 0 deletions
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<String> scripts = new LinkedHashSet<String>();
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 @@ -110,6 +110,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<List<RepositoryCommit>> repoCache = cache.get(repoKey); + if (repoCache != null) { + List<RepositoryCommit> 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. * * @param repositoryName |