From 4e84166db5c5538e3984d9d2d6bb1f9902e65ee0 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 04 Nov 2014 17:38:17 -0500 Subject: [PATCH] Merged #217 "Exclude SSLv3 from Gitblit GO https protocols" --- src/main/java/com/gitblit/utils/CommitCache.java | 93 ++++++++++++++++++++++++++++------------------ 1 files changed, 56 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/gitblit/utils/CommitCache.java b/src/main/java/com/gitblit/utils/CommitCache.java index e188ff9..a3963f5 100644 --- a/src/main/java/com/gitblit/utils/CommitCache.java +++ b/src/main/java/com/gitblit/utils/CommitCache.java @@ -35,39 +35,39 @@ /** * Caches repository commits for re-use in the dashboard and activity pages. - * + * * @author James Moger * */ public class CommitCache { - + private static final CommitCache instance; - + protected final Logger logger = LoggerFactory.getLogger(getClass()); - + protected final Map<String, ObjectCache<List<RepositoryCommit>>> cache; - + protected int cacheDays = -1; - + public static CommitCache instance() { return instance; } - + static { instance = new CommitCache(); } - + protected CommitCache() { cache = new ConcurrentHashMap<String, ObjectCache<List<RepositoryCommit>>>(); } - + /** * Returns the cutoff date for the cache. Commits after this date are cached. * Commits before this date are not cached. - * + * * @return */ - protected Date getCacheCutoffDate() { + public Date getCutoffDate() { final Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(System.currentTimeMillis()); cal.set(Calendar.HOUR_OF_DAY, 0); @@ -77,28 +77,28 @@ cal.add(Calendar.DATE, -1*cacheDays); return cal.getTime(); } - + /** * Sets the number of days to cache. - * + * * @param days */ public synchronized void setCacheDays(int days) { this.cacheDays = days; clear(); } - + /** * Clears the entire commit cache. - * + * */ public void clear() { cache.clear(); } - + /** * Clears the commit cache for a specific repository. - * + * * @param repositoryName */ public void clear(String repositoryName) { @@ -108,24 +108,41 @@ logger.info(MessageFormat.format("{0} commit cache cleared", repositoryName)); } } - + + /** + * 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 * @param repository * @param branch * @return a list of commits */ public List<RepositoryCommit> getCommits(String repositoryName, Repository repository, String branch) { - return getCommits(repositoryName, repository, branch, getCacheCutoffDate()); + return getCommits(repositoryName, repository, branch, getCutoffDate()); } - + /** * Get all commits for the specified repository:branch since a specific date. * These commits may be retrieved from the cache if the sinceDate is after * the cacheCutoffDate. - * + * * @param repositoryName * @param repository * @param branch @@ -134,7 +151,7 @@ */ public List<RepositoryCommit> getCommits(String repositoryName, Repository repository, String branch, Date sinceDate) { long start = System.nanoTime(); - Date cacheCutoffDate = getCacheCutoffDate(); + Date cacheCutoffDate = getCutoffDate(); List<RepositoryCommit> list; if (cacheDays > 0 && (sinceDate.getTime() >= cacheCutoffDate.getTime())) { // request fits within the cache window @@ -142,13 +159,13 @@ if (!cache.containsKey(repoKey)) { cache.put(repoKey, new ObjectCache<List<RepositoryCommit>>()); } - + ObjectCache<List<RepositoryCommit>> repoCache = cache.get(repoKey); String branchKey = branch.toLowerCase(); - + RevCommit tip = JGitUtils.getCommit(repository, branch); Date tipDate = JGitUtils.getCommitDate(tip); - + List<RepositoryCommit> commits; if (!repoCache.hasCurrent(branchKey, tipDate)) { commits = repoCache.getObject(branchKey); @@ -176,7 +193,7 @@ // update cache repoCache.updateObject(branchKey, tipDate, commits); } - + if (sinceDate.equals(cacheCutoffDate)) { list = commits; } else { @@ -193,10 +210,10 @@ } return list; } - + /** - * Returns a list of commits for the specified repository branch. - * + * Returns a list of commits for the specified repository branch. + * * @param repositoryName * @param repository * @param branch @@ -208,15 +225,16 @@ List<RepositoryCommit> commits = new ArrayList<RepositoryCommit>(); for (RevCommit commit : JGitUtils.getRevLog(repository, branch, sinceDate)) { RepositoryCommit commitModel = new RepositoryCommit(repositoryName, branch, commit); - commitModel.setRefs(allRefs.get(commitModel.getName())); + List<RefModel> commitRefs = allRefs.get(commitModel.getId()); + commitModel.setRefs(commitRefs); commits.add(commitModel); } return commits; } - + /** - * Returns a list of commits for the specified repository branch since the specified commit. - * + * Returns a list of commits for the specified repository branch since the specified commit. + * * @param repositoryName * @param repository * @param branch @@ -228,15 +246,16 @@ List<RepositoryCommit> commits = new ArrayList<RepositoryCommit>(); for (RevCommit commit : JGitUtils.getRevLog(repository, sinceCommit.getName(), branch)) { RepositoryCommit commitModel = new RepositoryCommit(repositoryName, branch, commit); - commitModel.setRefs(allRefs.get(commitModel.getName())); + List<RefModel> commitRefs = allRefs.get(commitModel.getId()); + commitModel.setRefs(commitRefs); commits.add(commitModel); } return commits; } - + /** * Reduces the list of commits to those since the specified date. - * + * * @param commits * @param sinceDate * @return a list of commits -- Gitblit v1.9.1