From fd8cea4761b5382f23d06ed52608d1f556c4dbe5 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 22 May 2014 17:31:30 -0400
Subject: [PATCH] Render GFM links using Markdown, not direct HTML

---
 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