summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/GitBlit.java
diff options
context:
space:
mode:
authorJames Moger <james.moger@gitblit.com>2013-08-16 09:35:41 -0400
committerJames Moger <james.moger@gitblit.com>2013-08-16 09:35:41 -0400
commit005a65d1862ec1fe940b4ef2b5dd47dca82d3b28 (patch)
tree081dd5c44ef4e60cf42d47e632dacff9a3726ca3 /src/main/java/com/gitblit/GitBlit.java
parent6a28f6dd38cf118308089217cae13674ce699f65 (diff)
downloadgitblit-005a65d1862ec1fe940b4ef2b5dd47dca82d3b28.tar.gz
gitblit-005a65d1862ec1fe940b4ef2b5dd47dca82d3b28.zip
Simplify when repository sizes are calculated (issue-295)
Diffstat (limited to 'src/main/java/com/gitblit/GitBlit.java')
-rw-r--r--src/main/java/com/gitblit/GitBlit.java82
1 files changed, 29 insertions, 53 deletions
diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java
index 688a19f0..cb5c0c5f 100644
--- a/src/main/java/com/gitblit/GitBlit.java
+++ b/src/main/java/com/gitblit/GitBlit.java
@@ -1497,22 +1497,13 @@ public class GitBlit implements ServletContextListener {
} else {
// we are caching this list
String msg = "{0} repositories identified in {1} msecs";
-
- // optionally (re)calculate repository sizes
if (getBoolean(Keys.web.showRepositorySizes, true)) {
- ByteFormat byteFormat = new ByteFormat();
+ // optionally (re)calculate repository sizes
msg = "{0} repositories identified with calculated folder sizes in {1} msecs";
- for (String repository : repositories) {
- RepositoryModel model = getRepositoryModel(repository);
- if (!model.skipSizeCalculation) {
- model.size = byteFormat.format(calculateSize(model));
- }
- }
- } else {
- // update cache
- for (String repository : repositories) {
- getRepositoryModel(repository);
- }
+ }
+
+ for (String repository : repositories) {
+ getRepositoryModel(repository);
}
// rebuild fork networks
@@ -1607,23 +1598,6 @@ public class GitBlit implements ServletContextListener {
}
}
}
- if (getBoolean(Keys.web.showRepositorySizes, true)) {
- int repoCount = 0;
- long startTime = System.currentTimeMillis();
- ByteFormat byteFormat = new ByteFormat();
- for (RepositoryModel model : repositories) {
- if (!model.skipSizeCalculation) {
- repoCount++;
- model.size = byteFormat.format(calculateSize(model));
- }
- }
- long duration = System.currentTimeMillis() - startTime;
- if (duration > 250) {
- // only log calcualtion time if > 250 msecs
- logger.info(MessageFormat.format("{0} repository sizes calculated in {1} msecs",
- repoCount, duration));
- }
- }
long duration = System.currentTimeMillis() - methodStart;
logger.info(MessageFormat.format("{0} repository models loaded for {1} in {2} msecs",
repositories.size(), user == null ? "anonymous" : user.username, duration));
@@ -1706,13 +1680,7 @@ public class GitBlit implements ServletContextListener {
model.hasCommits = JGitUtils.hasCommits(r);
}
- LastChange lc = JGitUtils.getLastChange(r);
- model.lastChange = lc.when;
- model.lastChangeAuthor = lc.who;
- if (!model.skipSizeCalculation) {
- ByteFormat byteFormat = new ByteFormat();
- model.size = byteFormat.format(calculateSize(model));
- }
+ updateLastChangeFields(r, model);
}
r.close();
@@ -2011,10 +1979,6 @@ public class GitBlit implements ServletContextListener {
// is symlinked. Use the provided repository name.
model.name = repositoryName;
}
- model.hasCommits = JGitUtils.hasCommits(r);
- LastChange lc = JGitUtils.getLastChange(r);
- model.lastChange = lc.when;
- model.lastChangeAuthor = lc.who;
model.projectPath = StringUtils.getFirstPathElement(repositoryName);
StoredConfig config = r.getConfig();
@@ -2076,6 +2040,8 @@ public class GitBlit implements ServletContextListener {
model.HEAD = JGitUtils.getHEADRef(r);
model.availableRefs = JGitUtils.getAvailableHeadTargets(r);
model.sparkleshareId = JGitUtils.getSparkleshareId(r);
+ model.hasCommits = JGitUtils.hasCommits(r);
+ updateLastChangeFields(r, model);
r.close();
if (StringUtils.isEmpty(model.originRepository) && model.origin != null && model.origin.startsWith("file://")) {
@@ -2271,21 +2237,31 @@ public class GitBlit implements ServletContextListener {
}
/**
- * Returns the size in bytes of the repository. Gitblit caches the
- * repository sizes to reduce the performance penalty of recursive
- * calculation. The cache is updated if the repository has been changed
- * since the last calculation.
+ * Updates the last changed fields and optionally calculates the size of the
+ * repository. Gitblit caches the repository sizes to reduce the performance
+ * penalty of recursive calculation. The cache is updated if the repository
+ * has been changed since the last calculation.
*
* @param model
- * @return size in bytes
+ * @return size in bytes of the repository
*/
- public long calculateSize(RepositoryModel model) {
- if (repositorySizeCache.hasCurrent(model.name, model.lastChange)) {
- return repositorySizeCache.getObject(model.name);
+ public long updateLastChangeFields(Repository r, RepositoryModel model) {
+ LastChange lc = JGitUtils.getLastChange(r);
+ model.lastChange = lc.when;
+ model.lastChangeAuthor = lc.who;
+
+ if (!getBoolean(Keys.web.showRepositorySizes, true) || model.skipSizeCalculation) {
+ model.size = null;
+ return 0L;
+ }
+ if (!repositorySizeCache.hasCurrent(model.name, model.lastChange)) {
+ File gitDir = r.getDirectory();
+ long sz = com.gitblit.utils.FileUtils.folderSize(gitDir);
+ repositorySizeCache.updateObject(model.name, model.lastChange, sz);
}
- File gitDir = FileKey.resolve(new File(repositoriesFolder, model.name), FS.DETECTED);
- long size = com.gitblit.utils.FileUtils.folderSize(gitDir);
- repositorySizeCache.updateObject(model.name, model.lastChange, size);
+ long size = repositorySizeCache.getObject(model.name);
+ ByteFormat byteFormat = new ByteFormat();
+ model.size = byteFormat.format(size);
return size;
}