From ad1a0235bfce09dbcbcc17a0b49a55862422b728 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 09 May 2014 08:19:18 -0400
Subject: [PATCH] Merged #68 "Confirm milestone deletion"
---
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