diff options
author | James Moger <james.moger@gitblit.com> | 2013-08-16 09:35:41 -0400 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2013-08-16 09:35:41 -0400 |
commit | 005a65d1862ec1fe940b4ef2b5dd47dca82d3b28 (patch) | |
tree | 081dd5c44ef4e60cf42d47e632dacff9a3726ca3 /src/main/java/com/gitblit/GitBlit.java | |
parent | 6a28f6dd38cf118308089217cae13674ce699f65 (diff) | |
download | gitblit-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.java | 82 |
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; } |